From: José Fonseca Date: Fri, 3 Jun 2011 18:33:56 +0000 (+0100) Subject: Support glMap* X-Git-Tag: 2.0_alpha^2~827 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=654295238c002fcf45039228a07e027a97cddadf;p=tools%2Fapitrace.git Support glMap* --- diff --git a/glapi.py b/glapi.py index 93e6942..d8076ef 100644 --- a/glapi.py +++ b/glapi.py @@ -294,10 +294,10 @@ glapi.add_functions([ GlFunction(Void, "glAccum", [(GLenum, "op"), (GLfloat, "value")]), GlFunction(Void, "glPopAttrib", []), GlFunction(Void, "glPushAttrib", [(GLbitfield_attrib, "mask")]), - GlFunction(Void, "glMap1d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "stride"), (GLint, "order"), (Const(OpaqueArray(GLdouble, "__glMap1d_size(target, stride, order)")), "points")]), - GlFunction(Void, "glMap1f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "stride"), (GLint, "order"), (Const(OpaqueArray(GLfloat, "__glMap1f_size(target, stride, order)")), "points")]), - GlFunction(Void, "glMap2d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLdouble, "v1"), (GLdouble, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Const(OpaqueArray(GLdouble, "__glMap2d_size(target, ustride, uorder, vstride, vorder)")), "points")]), - GlFunction(Void, "glMap2f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLfloat, "v1"), (GLfloat, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Const(OpaqueArray(GLfloat, "__glMap2f_size(target, ustride, uorder, vstride, vorder)")), "points")]), + GlFunction(Void, "glMap1d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "stride"), (GLint, "order"), (Const(Array(GLdouble, "__glMap1d_size(target, stride, order)")), "points")]), + GlFunction(Void, "glMap1f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "stride"), (GLint, "order"), (Const(Array(GLfloat, "__glMap1f_size(target, stride, order)")), "points")]), + GlFunction(Void, "glMap2d", [(GLenum, "target"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLdouble, "v1"), (GLdouble, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Const(Array(GLdouble, "__glMap2d_size(target, ustride, uorder, vstride, vorder)")), "points")]), + GlFunction(Void, "glMap2f", [(GLenum, "target"), (GLfloat, "u1"), (GLfloat, "u2"), (GLint, "ustride"), (GLint, "uorder"), (GLfloat, "v1"), (GLfloat, "v2"), (GLint, "vstride"), (GLint, "vorder"), (Const(Array(GLfloat, "__glMap2f_size(target, ustride, uorder, vstride, vorder)")), "points")]), GlFunction(Void, "glMapGrid1d", [(GLint, "un"), (GLdouble, "u1"), (GLdouble, "u2")]), GlFunction(Void, "glMapGrid1f", [(GLint, "un"), (GLfloat, "u1"), (GLfloat, "u2")]), GlFunction(Void, "glMapGrid2d", [(GLint, "un"), (GLdouble, "u1"), (GLdouble, "u2"), (GLint, "vn"), (GLdouble, "v1"), (GLdouble, "v2")]), diff --git a/glsize.hpp b/glsize.hpp index cff66d2..b9002c1 100644 --- a/glsize.hpp +++ b/glsize.hpp @@ -234,51 +234,83 @@ __glCallLists_size(GLsizei n, GLenum type) static inline size_t -__glMap1d_size(GLenum pname) +__glMap1d_size(GLenum target, GLint stride, GLint order) { - switch (pname) { + if (order < 1) { + return 0; + } + + GLint channels; + switch (target) { case GL_MAP1_INDEX: case GL_MAP1_TEXTURE_COORD_1: - return 1; + channels = 1; + break; case GL_MAP1_TEXTURE_COORD_2: - return 2; + channels = 2; + break; case GL_MAP1_NORMAL: case GL_MAP1_TEXTURE_COORD_3: case GL_MAP1_VERTEX_3: - return 3; + channels = 3; + break; case GL_MAP1_COLOR_4: case GL_MAP1_TEXTURE_COORD_4: case GL_MAP1_VERTEX_4: - return 4; + channels = 4; + break; default: - OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname); - return 1; + OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, target); + return 0; } + + if (stride < channels) { + return 0; + } + + return channels + stride * (order - 1); } #define __glMap1f_size __glMap1d_size static inline size_t -__glMap2d_size(GLenum pname) +__glMap2d_size(GLenum target, GLint ustride, GLint uorder, GLint vstride, GLint vorder) { - switch (pname) { + if (uorder < 1 || vorder < 1) { + return 0; + } + + GLint channels; + switch (target) { case GL_MAP2_INDEX: case GL_MAP2_TEXTURE_COORD_1: - return 1; + channels = 1; + break; case GL_MAP2_TEXTURE_COORD_2: - return 2; + channels = 2; + break; case GL_MAP2_NORMAL: case GL_MAP2_TEXTURE_COORD_3: case GL_MAP2_VERTEX_3: - return 3; + channels = 3; + break; case GL_MAP2_COLOR_4: case GL_MAP2_TEXTURE_COORD_4: case GL_MAP2_VERTEX_4: - return 4; + channels = 4; + break; default: - OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, pname); - return 1; + OS::DebugMessage("warning: %s: unknown GLenum 0x%04X\n", __FUNCTION__, target); + return 0; } + + if (ustride < channels || vstride < channels) { + return 0; + } + + return channels + + ustride * (uorder - 1) + + vstride * (vorder - 1); } #define __glMap2f_size __glMap2d_size