%% Copyright (c) 2005 Dan Gudmundsson %% %% See the file "license.terms" for information on usage and redistribution %% of this file, and for a DISCLAIMER OF ALL WARRANTIES. %% %% $Id: gl.erl,v 1.11 2006/05/15 14:45:44 dgud Exp $ %% -module(gl). -include("esdl.hrl"). -include("gl.hrl"). -include("gl_funcs.hrl"). -include("sdl_util.hrl"). -compile(export_all). -import(sdl, [call/2,cast/2]). -import(sdl_util, [bin2list/2,bin2list/3, term2bin/2, term2bin/3, matrix2bin/2]). %% Some binary type shortcuts -define(UN, unsigned-native). -define(SN, signed-native). -define(FN, float-native). glGetIntegervLen(Type) -> glGetBooleanvLen(Type). glGetDoublevLen(Type) -> glGetBooleanvLen(Type). glGetFloatvLen(Type) -> glGetBooleanvLen(Type). glGetBooleanvLen(Type) -> case Type of ?GL_ACCUM_ALPHA_BITS -> 1; ?GL_ACCUM_BLUE_BITS -> 1; ?GL_ACCUM_CLEAR_VALUE -> 4; ?GL_ACCUM_GREEN_BITS -> 1; ?GL_ACCUM_RED_BITS -> 1; ?GL_ALPHA_BIAS -> 1; ?GL_ALPHA_BITS -> 1; ?GL_ALPHA_SCALE -> 1; ?GL_ALPHA_TEST -> 1; ?GL_ALPHA_TEST_FUNC -> 1; ?GL_ALPHA_TEST_REF -> 1; ?GL_ATTRIB_STACK_DEPTH -> 1; ?GL_AUTO_NORMAL -> 1; ?GL_AUX_BUFFERS -> 1; ?GL_BLEND -> 1; ?GL_BLEND_DST -> 1; ?GL_BLEND_SRC -> 1; ?GL_BLUE_BIAS -> 1; ?GL_BLUE_BITS -> 1; ?GL_BLUE_SCALE -> 1; ?GL_CLIENT_ATTRIB_STACK_DEPTH -> 1; ?GL_CLIP_PLANE0 -> 1; ?GL_CLIP_PLANE1 -> 1; ?GL_CLIP_PLANE2 -> 1; ?GL_CLIP_PLANE3 -> 1; ?GL_CLIP_PLANE4 -> 1; ?GL_CLIP_PLANE5 -> 1; ?GL_COLOR_ARRAY -> 1; ?GL_COLOR_ARRAY_SIZE -> 1; ?GL_COLOR_ARRAY_STRIDE -> 1; ?GL_COLOR_ARRAY_TYPE -> 1; ?GL_COLOR_CLEAR_VALUE -> 4; ?GL_COLOR_LOGIC_OP -> 1; ?GL_COLOR_MATERIAL -> 1; ?GL_COLOR_MATERIAL_FACE -> 1; ?GL_COLOR_MATERIAL_PARAMETER -> 1; ?GL_COLOR_WRITEMASK -> 4; % -ifdef(GL_CONVOLUTION_1D_EXT). % ?GL_CONVOLUTION_1D_EXT -> 1; % ?GL_CONVOLUTION_2D_EXT -> 1; % -endif(). ?GL_CULL_FACE -> 1; ?GL_CULL_FACE_MODE -> 1; ?GL_CURRENT_COLOR -> 4; ?GL_CURRENT_INDEX -> 1; ?GL_CURRENT_NORMAL -> 3; ?GL_CURRENT_RASTER_COLOR -> 4; ?GL_CURRENT_RASTER_DISTANCE -> 1; ?GL_CURRENT_RASTER_INDEX -> 1; ?GL_CURRENT_RASTER_POSITION -> 4; ?GL_CURRENT_RASTER_POSITION_VALID -> 1; ?GL_CURRENT_RASTER_TEXTURE_COORDS -> 4; ?GL_CURRENT_TEXTURE_COORDS -> 4; ?GL_DEPTH_BIAS -> 1; ?GL_DEPTH_BITS -> 1; ?GL_DEPTH_CLEAR_VALUE -> 1; ?GL_DEPTH_FUNC -> 1; ?GL_DEPTH_RANGE -> 2; ?GL_DEPTH_SCALE -> 1; ?GL_DEPTH_TEST -> 1; ?GL_DEPTH_WRITEMASK -> 1; ?GL_DITHER -> 1; ?GL_DOUBLEBUFFER -> 1; ?GL_DRAW_BUFFER -> 1; ?GL_EDGE_FLAG -> 1; ?GL_EDGE_FLAG_ARRAY -> 1; ?GL_EDGE_FLAG_ARRAY_STRIDE -> 1; ?GL_FOG -> 1; ?GL_FOG_COLOR -> 4; ?GL_FOG_DENSITY -> 1; ?GL_FOG_END -> 1; ?GL_FOG_HINT -> 1; ?GL_FOG_INDEX -> 1; ?GL_FOG_MODE -> 1; ?GL_FOG_START -> 1; ?GL_FRONT_FACE -> 1; % ?GL_GLOBAL_ALPHA_FACTOR_SUN -> 1; ?GL_GREEN_BIAS -> 1; ?GL_GREEN_BITS -> 1; ?GL_GREEN_SCALE -> 1; % -ifdef(GL_HISTOGRAM_EXT). % ?GL_HISTOGRAM_EXT -> 1; % -endif(). ?GL_INDEX_ARRAY -> 1; ?GL_INDEX_ARRAY_STRIDE -> 1; ?GL_INDEX_ARRAY_TYPE -> 1; ?GL_INDEX_BITS -> 1; ?GL_INDEX_CLEAR_VALUE -> 1; ?GL_INDEX_LOGIC_OP -> 1; ?GL_INDEX_MODE -> 1; ?GL_INDEX_OFFSET -> 1; ?GL_INDEX_SHIFT -> 1; ?GL_INDEX_WRITEMASK -> 1; ?GL_LIGHT0 -> 1; ?GL_LIGHT1 -> 1; ?GL_LIGHT2 -> 1; ?GL_LIGHT3 -> 1; ?GL_LIGHT4 -> 1; ?GL_LIGHT5 -> 1; ?GL_LIGHT6 -> 1; ?GL_LIGHT7 -> 1; % ?GL_LIGHT8 -> 1; % ?GL_LIGHT9 -> 1; ?GL_LIGHTING -> 1; ?GL_LIGHT_MODEL_AMBIENT -> 4; ?GL_LIGHT_MODEL_LOCAL_VIEWER -> 1; ?GL_LIGHT_MODEL_TWO_SIDE -> 1; ?GL_LINE_SMOOTH -> 1; ?GL_LINE_SMOOTH_HINT -> 1; ?GL_LINE_STIPPLE -> 1; ?GL_LINE_STIPPLE_PATTERN -> 1; ?GL_LINE_STIPPLE_REPEAT -> 1; ?GL_LINE_WIDTH -> 1; ?GL_LINE_WIDTH_GRANULARITY -> 1; ?GL_LINE_WIDTH_RANGE -> 2; ?GL_LIST_BASE -> 1; ?GL_LIST_INDEX -> 1; ?GL_LIST_MODE -> 1; ?GL_LOGIC_OP_MODE -> 1; ?GL_MAP1_COLOR_4 -> 1; ?GL_MAP1_GRID_DOMAIN -> 2; ?GL_MAP1_GRID_SEGMENTS -> 1; ?GL_MAP1_INDEX -> 1; ?GL_MAP1_NORMAL -> 1; ?GL_MAP1_TEXTURE_COORD_1 -> 1; ?GL_MAP1_TEXTURE_COORD_2 -> 1; ?GL_MAP1_TEXTURE_COORD_3 -> 1; ?GL_MAP1_TEXTURE_COORD_4 -> 1; ?GL_MAP1_VERTEX_3 -> 1; ?GL_MAP1_VERTEX_4 -> 1; ?GL_MAP2_COLOR_4 -> 1; ?GL_MAP2_GRID_DOMAIN -> 4; ?GL_MAP2_GRID_SEGMENTS -> 2; ?GL_MAP2_INDEX -> 1; ?GL_MAP2_NORMAL -> 1; ?GL_MAP2_TEXTURE_COORD_1 -> 1; ?GL_MAP2_TEXTURE_COORD_2 -> 1; ?GL_MAP2_TEXTURE_COORD_3 -> 1; ?GL_MAP2_TEXTURE_COORD_4 -> 1; ?GL_MAP2_VERTEX_3 -> 1; ?GL_MAP2_VERTEX_4 -> 1; ?GL_MAP_COLOR -> 1; ?GL_MAP_STENCIL -> 1; ?GL_MATRIX_MODE -> 1; ?GL_MAX_3D_TEXTURE_SIZE -> 1; ?GL_MAX_CLIENT_ATTRIB_STACK_DEPTH -> 1; ?GL_MAX_ATTRIB_STACK_DEPTH -> 1; ?GL_MAX_CLIP_PLANES -> 1; ?GL_MAX_ELEMENTS_INDICES -> 1; ?GL_MAX_ELEMENTS_VERTICES -> 1; ?GL_MAX_EVAL_ORDER -> 1; ?GL_MAX_LIGHTS -> 1; ?GL_MAX_LIST_NESTING -> 1; ?GL_MAX_MODELVIEW_STACK_DEPTH -> 1; ?GL_MAX_NAME_STACK_DEPTH -> 1; ?GL_MAX_PIXEL_MAP_TABLE -> 1; ?GL_MAX_PROJECTION_STACK_DEPTH -> 1; ?GL_MAX_TEXTURE_SIZE -> 1; ?GL_MAX_TEXTURE_STACK_DEPTH -> 1; ?GL_MAX_VERTEX_UNITS_ARB -> 1; ?GL_MAX_VIEWPORT_DIMS -> 2; ?GL_MODELVIEW_MATRIX -> 16; %% ?GL_MINMAX_EXT -> 1; ?GL_MODELVIEW_STACK_DEPTH -> 1; ?GL_NAME_STACK_DEPTH -> 1; ?GL_NORMAL_ARRAY -> 1; ?GL_NORMAL_ARRAY_STRIDE -> 1; ?GL_NORMAL_ARRAY_TYPE -> 1; ?GL_NORMALIZE -> 1; ?GL_NUM_COMPRESSED_TEXTURE_FORMATS -> 1; ?GL_PACK_ALIGNMENT -> 1; ?GL_PACK_LSB_FIRST -> 1; ?GL_PACK_ROW_LENGTH -> 1; ?GL_PACK_SKIP_PIXELS -> 1; ?GL_PACK_SKIP_ROWS -> 1; ?GL_PACK_SWAP_BYTES -> 1; ?GL_PERSPECTIVE_CORRECTION_HINT -> 1; ?GL_PIXEL_MAP_A_TO_A_SIZE -> 1; ?GL_PIXEL_MAP_B_TO_B_SIZE -> 1; ?GL_PIXEL_MAP_G_TO_G_SIZE -> 1; ?GL_PIXEL_MAP_I_TO_A_SIZE -> 1; ?GL_PIXEL_MAP_I_TO_B_SIZE -> 1; ?GL_PIXEL_MAP_I_TO_G_SIZE -> 1; ?GL_PIXEL_MAP_I_TO_I_SIZE -> 1; ?GL_PIXEL_MAP_I_TO_R_SIZE -> 1; ?GL_PIXEL_MAP_R_TO_R_SIZE -> 1; ?GL_PIXEL_MAP_S_TO_S_SIZE -> 1; ?GL_POINT_SIZE -> 1; ?GL_POINT_SIZE_GRANULARITY -> 1; ?GL_POINT_SIZE_RANGE -> 2; ?GL_POINT_SMOOTH -> 1; ?GL_POINT_SMOOTH_HINT -> 1; ?GL_POLYGON_MODE -> 2; ?GL_POLYGON_OFFSET_FACTOR -> 1; ?GL_POLYGON_OFFSET_UNITS -> 1; ?GL_POLYGON_OFFSET_FILL -> 1; ?GL_POLYGON_OFFSET_LINE -> 1; ?GL_POLYGON_OFFSET_POINT -> 1; % ?GL_POLYGON_OFFSET_BIAS_EXT -> 1; % ?GL_POLYGON_OFFSET_FACTOR_EXT -> 1; % ?GL_POLYGON_OFFSET_EXT -> 1; ?GL_POLYGON_SMOOTH -> 1; ?GL_POLYGON_SMOOTH_HINT -> 1; ?GL_POLYGON_STIPPLE -> 1; % ?GL_POST_CONVOLUTION_ALPHA_BIAS_EXT -> 1; % ?GL_POST_CONVOLUTION_BLUE_BIAS_EXT -> 1; % ?GL_POST_CONVOLUTION_GREEN_BIAS_EXT -> 1; % ?GL_POST_CONVOLUTION_RED_BIAS_EXT -> 1; % ?GL_POST_CONVOLUTION_ALPHA_SCALE_EXT -> 1; % ?GL_POST_CONVOLUTION_BLUE_SCALE_EXT -> 1; % ?GL_POST_CONVOLUTION_GREEN_SCALE_EXT -> 1; % ?GL_POST_CONVOLUTION_RED_SCALE_EXT -> 1; ?GL_PROJECTION_MATRIX -> 16; ?GL_PROJECTION_STACK_DEPTH -> 1; ?GL_READ_BUFFER -> 1; ?GL_RED_BIAS -> 1; ?GL_RED_BITS -> 1; ?GL_RED_SCALE -> 1; ?GL_RENDER_MODE -> 1; ?GL_RGBA_MODE -> 1; ?GL_SCISSOR_BOX -> 4; ?GL_SCISSOR_TEST -> 1; % ?GL_SEPARABLE_2D_EXT -> 1; ?GL_SHADE_MODEL -> 1; ?GL_STENCIL_BITS -> 1; ?GL_STENCIL_CLEAR_VALUE -> 1; ?GL_STENCIL_FAIL -> 1; ?GL_STENCIL_FUNC -> 1; ?GL_STENCIL_PASS_DEPTH_FAIL -> 1; ?GL_STENCIL_PASS_DEPTH_PASS -> 1; ?GL_STENCIL_REF -> 1; ?GL_STENCIL_TEST -> 1; ?GL_STENCIL_VALUE_MASK -> 1; ?GL_STENCIL_WRITEMASK -> 1; ?GL_STEREO -> 1; ?GL_SUBPIXEL_BITS -> 1; ?GL_TEXTURE_1D -> 1; % ?GL_TEXTURE_1D_BINDING -> 1; ?GL_TEXTURE_2D -> 1; % ?GL_TEXTURE_2D_BINDING -> 1; ?GL_TEXTURE_COORD_ARRAY -> 1; ?GL_TEXTURE_COORD_ARRAY_SIZE -> 1; ?GL_TEXTURE_COORD_ARRAY_STRIDE -> 1; ?GL_TEXTURE_COORD_ARRAY_TYPE -> 1; ?GL_TEXTURE_GEN_Q -> 1; ?GL_TEXTURE_GEN_R -> 1; ?GL_TEXTURE_GEN_S -> 1; ?GL_TEXTURE_GEN_T -> 1; ?GL_TEXTURE_MATRIX -> 16; ?GL_TEXTURE_STACK_DEPTH -> 1; ?GL_UNPACK_ALIGNMENT -> 1; ?GL_UNPACK_LSB_FIRST -> 1; ?GL_UNPACK_ROW_LENGTH -> 1; ?GL_UNPACK_SKIP_PIXELS -> 1; ?GL_UNPACK_SKIP_ROWS -> 1; % ?GL_UNPACK_CONSTANT_DATA_SUNX -> 1; ?GL_UNPACK_SWAP_BYTES -> 1; ?GL_VERTEX_ARRAY -> 1; ?GL_VERTEX_ARRAY_SIZE -> 1; ?GL_VERTEX_ARRAY_STRIDE -> 1; ?GL_VERTEX_ARRAY_TYPE -> 1; ?GL_VIEWPORT -> 4; ?GL_ZOOM_X -> 1; ?GL_ZOOM_Y -> 1; ?GL_MAX_TEXTURE_UNITS -> 1; %% Unknown length use 16 so far %% the greatest known return value _Else -> 16 end. glGetLightivLen(Type) -> glGetLightfvLen(Type). glGetLightfvLen(Type) -> case Type of ?GL_AMBIENT -> 4; ?GL_DIFFUSE -> 4; ?GL_SPECULAR -> 4; ?GL_POSITION -> 4; ?GL_SPOT_DIRECTION -> 3; ?GL_SPOT_EXPONENT -> 1; ?GL_SPOT_CUTOFF -> 1; ?GL_CONSTANT_ATTENUATION -> 1; ?GL_LINEAR_ATTENUATION -> 1; ?GL_QUADRATIC_ATTENUATION -> 1 end. glGetMaterialivLen(Type) -> glGetMaterialfvLen(Type). glGetMaterialfvLen(Type) -> case Type of ?GL_AMBIENT -> 4; ?GL_DIFFUSE -> 4; ?GL_SPECULAR -> 4; ?GL_EMISSION -> 4; ?GL_SHININESS -> 1; ?GL_COLOR_INDEXES -> 3; _ -> 4 end. glGetTexGendvLen(Type) -> glGetTexGenivLen(Type). glGetTexGenfvLen(Type) -> glGetTexGenivLen(Type). glGetTexGenivLen(Type) -> case Type of ?GL_TEXTURE_GEN_MODE -> 1; ?GL_OBJECT_PLANE -> 4; ?GL_EYE_PLANE -> 4; _ -> 4 end. glGetTexEnvfvLen(Type) -> glGetTexEnvivLen(Type). glGetTexEnvivLen(Type) -> case Type of ?GL_TEXTURE_ENV_MODE -> 1; ?GL_TEXTURE_ENV_COLOR -> 4; _ -> 4 end. glGetTexParameterivLen(Type) -> glGetTexParameterfvLen(Type). glGetTexParameterfvLen(Type) -> case Type of ?GL_TEXTURE_MAG_FILTER -> 1; ?GL_TEXTURE_MIN_FILTER -> 1; ?GL_TEXTURE_WRAP_S -> 1; ?GL_TEXTURE_WRAP_T -> 1; ?GL_TEXTURE_BORDER_COLOR -> 4; ?GL_TEXTURE_PRIORITY -> 1; ?GL_TEXTURE_RESIDENT -> 1; _ -> 4 end. %% Backward compability glBegin(Arg) -> 'begin'(Arg). glEnd() -> 'end'(). swapBuffers() -> sdl_video:gl_swapBuffers(). %% Func: accum %% Args: Op, Value %% Returns: ok %% C-API func: void glAccum(GLenum op, GLfloat value) accum(Op, Value) -> cast(?glAccum, <>). %% Func: alphaFunc %% Args: Func, Ref %% Returns: ok %% C-API func: void glAlphaFunc(GLenum func, GLclampf ref) alphaFunc(Func, Ref) -> cast(?glAlphaFunc, <>). %% Func: areTexturesResident %% Args: N, <<[Textures]>> %% Returns: {?GL_BYTE, [Residences]} %% C-API func: GLboolean glAreTexturesResident(GLsizei n, const GLuint * textures, GLboolean * residences) areTexturesResident(N, Textures) -> NewTextures = if is_list(Textures) ; is_tuple(Textures) -> term2bin(Textures, N, ?GL_UNSIGNED_INT); is_binary(Textures) -> Textures; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Textures}) end, Bin = call(?glAreTexturesResident, [<>,NewTextures]), case Bin of <> -> {Ret /= ?GL_FALSE, bin2list(N, ?GL_BYTE, Residences)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: arrayElement %% Args: I %% Returns: ok %% C-API func: void glArrayElement(GLint i) arrayElement(I) -> cast(?glArrayElement, <>). %% Func: 'begin' %% Args: Mode %% Returns: ok %% C-API func: void glBegin(GLenum mode) 'begin'(Mode) -> cast(?glBegin, <>). %% Func: bindTexture %% Args: Target, Texture %% Returns: ok %% C-API func: void glBindTexture(GLenum target, GLuint texture) bindTexture(Target, Texture) -> cast(?glBindTexture, <>). %% Func: bitmap %% Args: Width, Height, Xorig, Yorig, Xmove, Ymove, <<[Bitmap]>> %% Returns: ok %% C-API func: void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap) bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> %% Maybe NULL or offset sometimes NewBitmap = if is_integer(Bitmap) -> Bitmap; true -> sdl:send_bin(Bitmap, ?MODULE, ?LINE), 0 end, cast(?glBitmap, [<>]). %% Func: blendFunc %% Args: Sfactor, Dfactor %% Returns: ok %% C-API func: void glBlendFunc(GLenum sfactor, GLenum dfactor) blendFunc(Sfactor, Dfactor) -> cast(?glBlendFunc, <>). %% Func: callList %% Args: List %% Returns: ok %% C-API func: void glCallList(GLuint list) callList(List) -> cast(?glCallList, <>). %% Func: callLists %% Args: N, Type, <<[Lists]>> %% Returns: ok %% C-API func: void glCallLists(GLsizei n, GLenum type, const GLvoid * lists) callLists(N, Type, Lists) -> NewLists = if is_list(Lists) ; is_tuple(Lists) -> term2bin(Lists, N, Type); is_binary(Lists) -> Lists; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Lists}) end, cast(?glCallLists, [<>,NewLists]). %% Func: clear %% Args: Mask %% Returns: ok %% C-API func: void glClear(GLbitfield mask) clear(Mask) -> cast(?glClear, <>). %% Func: clearAccum %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) clearAccum(Red, Green, Blue, Alpha) -> cast(?glClearAccum, <>). %% Func: clearColor %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) clearColor(Red, Green, Blue, Alpha) -> cast(?glClearColor, <>). %% Func: clearDepth %% Args: Depth %% Returns: ok %% C-API func: void glClearDepth(GLclampd depth) clearDepth(Depth) -> cast(?glClearDepth, <>). %% Func: clearIndex %% Args: C %% Returns: ok %% C-API func: void glClearIndex(GLfloat c) clearIndex(C) -> cast(?glClearIndex, <>). %% Func: clearStencil %% Args: S %% Returns: ok %% C-API func: void glClearStencil(GLint s) clearStencil(S) -> cast(?glClearStencil, <>). %% Func: clipPlane %% Args: Plane, <<[Equation]>> %% Returns: ok %% C-API func: void glClipPlane(GLenum plane, const GLdouble * equation) clipPlane(Plane, Equation) -> NewEquation = if is_list(Equation) ; is_tuple(Equation) -> term2bin(Equation, 4, ?GL_DOUBLE); binary(Equation) -> Equation; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Equation}) end, cast(?glClipPlane, [<>,NewEquation]). %% Func: color3b %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3b(GLbyte red, GLbyte green, GLbyte blue) color3b(Red, Green, Blue) -> cast(?glColor3bv, <>). %% Func: color3bv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3bv( const GLbyte * v) color3bv({V1,V2,V3}) -> cast(?glColor3bv, <>). %% Func: color3d %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3d(GLdouble red, GLdouble green, GLdouble blue) color3d(Red, Green, Blue) -> cast(?glColor3dv, <>). %% Func: color3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3dv( const GLdouble * v) color3dv({V1,V2,V3}) -> cast(?glColor3dv, <>). %% Func: color3f %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3f(GLfloat red, GLfloat green, GLfloat blue) color3f(Red, Green, Blue) -> cast(?glColor3fv, <>). %% Func: color3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3fv( const GLfloat * v) color3fv({V1,V2,V3}) -> cast(?glColor3fv, <>). %% Func: color3i %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3i(GLint red, GLint green, GLint blue) color3i(Red, Green, Blue) -> cast(?glColor3iv, <>). %% Func: color3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3iv( const GLint * v) color3iv({V1,V2,V3}) -> cast(?glColor3iv, <>). %% Func: color3s %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3s(GLshort red, GLshort green, GLshort blue) color3s(Red, Green, Blue) -> cast(?glColor3sv, <>). %% Func: color3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3sv( const GLshort * v) color3sv({V1,V2,V3}) -> cast(?glColor3sv, <>). %% Func: color3ub %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3ub(GLubyte red, GLubyte green, GLubyte blue) color3ub(Red, Green, Blue) -> cast(?glColor3ubv, <>). %% Func: color3ubv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3ubv( const GLubyte * v) color3ubv({V1,V2,V3}) -> cast(?glColor3ubv, <>). %% Func: color3ui %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3ui(GLuint red, GLuint green, GLuint blue) color3ui(Red, Green, Blue) -> cast(?glColor3uiv, <>). %% Func: color3uiv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3uiv( const GLuint * v) color3uiv({V1,V2,V3}) -> cast(?glColor3uiv, <>). %% Func: color3us %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glColor3us(GLushort red, GLushort green, GLushort blue) color3us(Red, Green, Blue) -> cast(?glColor3usv, <>). %% Func: color3usv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glColor3usv( const GLushort * v) color3usv({V1,V2,V3}) -> cast(?glColor3usv, <>). %% Func: color4b %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) color4b(Red, Green, Blue, Alpha) -> cast(?glColor4bv, <>). %% Func: color4bv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4bv( const GLbyte * v) color4bv({V1,V2,V3,V4}) -> cast(?glColor4bv, <>). %% Func: color4d %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) color4d(Red, Green, Blue, Alpha) -> cast(?glColor4dv, <>). %% Func: color4dv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4dv( const GLdouble * v) color4dv({V1,V2,V3,V4}) -> cast(?glColor4dv, <>). %% Func: color4f %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) color4f(Red, Green, Blue, Alpha) -> cast(?glColor4fv, <>). %% Func: color4fv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4fv( const GLfloat * v) color4fv({V1,V2,V3,V4}) -> cast(?glColor4fv, <>). %% Func: color4i %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4i(GLint red, GLint green, GLint blue, GLint alpha) color4i(Red, Green, Blue, Alpha) -> cast(?glColor4iv, <>). %% Func: color4iv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4iv( const GLint * v) color4iv({V1,V2,V3,V4}) -> cast(?glColor4iv, <>). %% Func: color4s %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha) color4s(Red, Green, Blue, Alpha) -> cast(?glColor4sv, <>). %% Func: color4sv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4sv( const GLshort * v) color4sv({V1,V2,V3,V4}) -> cast(?glColor4sv, <>). %% Func: color4ub %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) color4ub(Red, Green, Blue, Alpha) -> cast(?glColor4ubv, <>). %% Func: color4ubv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4ubv( const GLubyte * v) color4ubv({V1,V2,V3,V4}) -> cast(?glColor4ubv, <>). %% Func: color4ui %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha) color4ui(Red, Green, Blue, Alpha) -> cast(?glColor4uiv, <>). %% Func: color4uiv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4uiv( const GLuint * v) color4uiv({V1,V2,V3,V4}) -> cast(?glColor4uiv, <>). %% Func: color4us %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha) color4us(Red, Green, Blue, Alpha) -> cast(?glColor4usv, <>). %% Func: color4usv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glColor4usv( const GLushort * v) color4usv({V1,V2,V3,V4}) -> cast(?glColor4usv, <>). %% Func: colorMask %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) colorMask(Red, Green, Blue, Alpha) -> cast(?glColorMask, <>). %% Func: colorMaterial %% Args: Face, Mode %% Returns: ok %% C-API func: void glColorMaterial(GLenum face, GLenum mode) colorMaterial(Face, Mode) -> cast(?glColorMaterial, <>). %% Func: colorPointer %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) colorPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glColorPointer, [<>]). %% Func: copyPixels %% Args: X, Y, Width, Height, Type %% Returns: ok %% C-API func: void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) copyPixels(X, Y, Width, Height, Type) -> cast(?glCopyPixels, <>). %% Func: copyTexImage1D %% Args: Target, Level, Internalformat, X, Y, Width, Border %% Returns: ok %% C-API func: void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) -> cast(?glCopyTexImage1D, <>). %% Func: copyTexImage2D %% Args: Target, Level, Internalformat, X, Y, Width, Height, Border %% Returns: ok %% C-API func: void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height, Border) -> cast(?glCopyTexImage2D, <>). %% Func: copyTexSubImage1D %% Args: Target, Level, Xoffset, X, Y, Width %% Returns: ok %% C-API func: void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) copyTexSubImage1D(Target, Level, Xoffset, X, Y, Width) -> cast(?glCopyTexSubImage1D, <>). %% Func: copyTexSubImage2D %% Args: Target, Level, Xoffset, Yoffset, X, Y, Width, Height %% Returns: ok %% C-API func: void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width, Height) -> cast(?glCopyTexSubImage2D, <>). %% Func: cullFace %% Args: Mode %% Returns: ok %% C-API func: void glCullFace(GLenum mode) cullFace(Mode) -> cast(?glCullFace, <>). %% Func: deleteLists %% Args: List, Range %% Returns: ok %% C-API func: void glDeleteLists(GLuint list, GLsizei range) deleteLists(List, Range) -> cast(?glDeleteLists, <>). %% Func: deleteTextures %% Args: N, <<[Textures]>> %% Returns: ok %% C-API func: void glDeleteTextures(GLsizei n, const GLuint * textures) deleteTextures(N, Textures) -> NewTextures = if is_list(Textures) ; is_tuple(Textures) -> term2bin(Textures, N, ?GL_UNSIGNED_INT); is_binary(Textures) -> Textures; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Textures}) end, cast(?glDeleteTextures, [<>,NewTextures]). %% Func: depthFunc %% Args: Func %% Returns: ok %% C-API func: void glDepthFunc(GLenum func) depthFunc(Func) -> cast(?glDepthFunc, <>). %% Func: depthMask %% Args: Flag %% Returns: ok %% C-API func: void glDepthMask(GLboolean flag) depthMask(Flag) -> cast(?glDepthMask, <>). %% Func: depthRange %% Args: ZNear, ZFar %% Returns: ok %% C-API func: void glDepthRange(GLclampd zNear, GLclampd zFar) depthRange(ZNear, ZFar) -> cast(?glDepthRange, <>). %% Func: disable %% Args: Cap %% Returns: ok %% C-API func: void glDisable(GLenum cap) disable(Cap) -> cast(?glDisable, <>). %% Func: disableClientState %% Args: Array %% Returns: ok %% C-API func: void glDisableClientState(GLenum array) disableClientState(Array) -> cast(?glDisableClientState, <>). %% Func: drawArrays %% Args: Mode, First, Count %% Returns: ok %% C-API func: void glDrawArrays(GLenum mode, GLint first, GLsizei count) drawArrays(Mode, First, Count) -> cast(?glDrawArrays, <>). %% Func: drawBuffer %% Args: Mode %% Returns: ok %% C-API func: void glDrawBuffer(GLenum mode) drawBuffer(Mode) -> cast(?glDrawBuffer, <>). %% Func: drawElements %% Args: Mode, Count, Type, <<[Indices]>> %% Returns: ok %% C-API func: void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices) drawElements(Mode, Count, Type, Indices) -> NewIndices = if is_list(Indices) ; is_tuple(Indices) -> term2bin(Indices, Count, Type); is_binary(Indices) -> Indices; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Indices}) end, cast(?glDrawElements, [<>,NewIndices]). %% Func: drawPixels %% Args: Width, Height, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) drawPixels(Width, Height, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glDrawPixels, [<>]). %% Func: edgeFlag %% Args: Flag %% Returns: ok %% C-API func: void glEdgeFlag(GLboolean flag) edgeFlag(Flag) -> cast(?glEdgeFlag, <>). %% Func: edgeFlagPointer %% Args: Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glEdgeFlagPointer(GLsizei stride, const GLboolean * pointer) edgeFlagPointer(Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glEdgeFlagPointer, [<>]). %% Func: edgeFlagv %% Args: <<[Flag]>> %% Returns: ok %% C-API func: void glEdgeFlagv( const GLboolean * flag) edgeFlagv(Flag) -> NewFlag = if is_list(Flag) ; is_tuple(Flag) -> term2bin(Flag, 1, ?GL_BYTE); binary(Flag) -> Flag; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Flag}) end, cast(?glEdgeFlagv, [ NewFlag]). %% Func: enable %% Args: Cap %% Returns: ok %% C-API func: void glEnable(GLenum cap) enable(Cap) -> cast(?glEnable, <>). %% Func: enableClientState %% Args: Array %% Returns: ok %% C-API func: void glEnableClientState(GLenum array) enableClientState(Array) -> cast(?glEnableClientState, <>). %% Func: 'end' %% Args: %% Returns: ok %% C-API func: void glEnd() 'end'() -> cast(?glEnd, []). %% Func: endList %% Args: %% Returns: ok %% C-API func: void glEndList() endList() -> cast(?glEndList, []). %% Func: evalCoord1d %% Args: U %% Returns: ok %% C-API func: void glEvalCoord1d(GLdouble u) evalCoord1d(U) -> cast(?glEvalCoord1dv, <>). %% Func: evalCoord1dv %% Args: {U1} %% Returns: ok %% C-API func: void glEvalCoord1dv( const GLdouble * u) evalCoord1dv({U1}) -> cast(?glEvalCoord1dv, <>). %% Func: evalCoord1f %% Args: U %% Returns: ok %% C-API func: void glEvalCoord1f(GLfloat u) evalCoord1f(U) -> cast(?glEvalCoord1fv, <>). %% Func: evalCoord1fv %% Args: {U1} %% Returns: ok %% C-API func: void glEvalCoord1fv( const GLfloat * u) evalCoord1fv({U1}) -> cast(?glEvalCoord1fv, <>). %% Func: evalCoord2d %% Args: U, V %% Returns: ok %% C-API func: void glEvalCoord2d(GLdouble u, GLdouble v) evalCoord2d(U, V) -> cast(?glEvalCoord2dv, <>). %% Func: evalCoord2dv %% Args: {U1,U2} %% Returns: ok %% C-API func: void glEvalCoord2dv( const GLdouble * u) evalCoord2dv({U1,U2}) -> cast(?glEvalCoord2dv, <>). %% Func: evalCoord2f %% Args: U, V %% Returns: ok %% C-API func: void glEvalCoord2f(GLfloat u, GLfloat v) evalCoord2f(U, V) -> cast(?glEvalCoord2fv, <>). %% Func: evalCoord2fv %% Args: {U1,U2} %% Returns: ok %% C-API func: void glEvalCoord2fv( const GLfloat * u) evalCoord2fv({U1,U2}) -> cast(?glEvalCoord2fv, <>). %% Func: evalMesh1 %% Args: Mode, I1, I2 %% Returns: ok %% C-API func: void glEvalMesh1(GLenum mode, GLint i1, GLint i2) evalMesh1(Mode, I1, I2) -> cast(?glEvalMesh1, <>). %% Func: evalMesh2 %% Args: Mode, I1, I2, J1, J2 %% Returns: ok %% C-API func: void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) evalMesh2(Mode, I1, I2, J1, J2) -> cast(?glEvalMesh2, <>). %% Func: evalPoint1 %% Args: I %% Returns: ok %% C-API func: void glEvalPoint1(GLint i) evalPoint1(I) -> cast(?glEvalPoint1, <>). %% Func: evalPoint2 %% Args: I, J %% Returns: ok %% C-API func: void glEvalPoint2(GLint i, GLint j) evalPoint2(I, J) -> cast(?glEvalPoint2, <>). %% Func: feedbackBuffer %% Args: Size, Type, #sdlmem{} = Buffer %% Returns: ok %% C-API func: void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat * buffer) feedbackBuffer(Size, Type, #sdlmem{bin=Buffer}) -> sdl:send_bin(Buffer, ?MODULE, ?LINE), cast(?glFeedbackBuffer, <>). %% Func: finish %% Args: %% Returns: ok %% C-API func: void glFinish() finish() -> cast(?glFinish, []). %% Func: flush %% Args: %% Returns: ok %% C-API func: void glFlush() flush() -> cast(?glFlush, []). %% Func: fogf %% Args: Pname, Param %% Returns: ok %% C-API func: void glFogf(GLenum pname, GLfloat param) fogf(Pname, Param) -> cast(?glFogf, <>). %% Func: fogfv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glFogfv(GLenum pname, const GLfloat * params) fogfv(Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glFogfv, [<>,NewParams]). %% Func: fogi %% Args: Pname, Param %% Returns: ok %% C-API func: void glFogi(GLenum pname, GLint param) fogi(Pname, Param) -> cast(?glFogi, <>). %% Func: fogiv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glFogiv(GLenum pname, const GLint * params) fogiv(Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glFogiv, [<>,NewParams]). %% Func: frontFace %% Args: Mode %% Returns: ok %% C-API func: void glFrontFace(GLenum mode) frontFace(Mode) -> cast(?glFrontFace, <>). %% Func: frustum %% Args: Left, Right, Bottom, Top, ZNear, ZFar %% Returns: ok %% C-API func: void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) frustum(Left, Right, Bottom, Top, ZNear, ZFar) -> cast(?glFrustum, <>). %% Func: genLists %% Args: Range %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLuint glGenLists(GLsizei range) genLists(Range) -> Bin = call(?glGenLists, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: genTextures %% Args: N %% Returns: [Textures] %% C-API func: void glGenTextures(GLsizei n, GLuint * textures) genTextures(N) -> Bin = call(?glGenTextures, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Textures); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getBooleanv %% Args: Pname %% Returns: [Params] %% C-API func: void glGetBooleanv(GLenum pname, GLboolean * params) getBooleanv(Pname) -> Bin = call(?glGetBooleanv, <>), ParamsLen = glGetBooleanvLen(Pname), ParamsBump = 16 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_BYTE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getClipPlane %% Args: Plane %% Returns: [Equation] %% C-API func: void glGetClipPlane(GLenum plane, GLdouble * equation) getClipPlane(Plane) -> Bin = call(?glGetClipPlane, <>), case Bin of <> -> bin2list(4, ?GL_DOUBLE, Equation); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getDoublev %% Args: Pname %% Returns: [Params] %% C-API func: void glGetDoublev(GLenum pname, GLdouble * params) getDoublev(Pname) -> Bin = call(?glGetDoublev, <>), ParamsLen = glGetDoublevLen(Pname), ParamsBump = 16 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_DOUBLE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getError %% Args: %% Returns: ?GL_INT %% C-API func: GLenum glGetError() getError() -> Bin = call(?glGetError, []), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getFloatv %% Args: Pname %% Returns: [Params] %% C-API func: void glGetFloatv(GLenum pname, GLfloat * params) getFloatv(Pname) -> Bin = call(?glGetFloatv, <>), ParamsLen = glGetFloatvLen(Pname), ParamsBump = 16 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getIntegerv %% Args: Pname %% Returns: [Params] %% C-API func: void glGetIntegerv(GLenum pname, GLint * params) getIntegerv(Pname) -> Bin = call(?glGetIntegerv, <>), ParamsLen = glGetIntegervLen(Pname), ParamsBump = 16 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getLightfv %% Args: Light, Pname %% Returns: [Params] %% C-API func: void glGetLightfv(GLenum light, GLenum pname, GLfloat * params) getLightfv(Light, Pname) -> Bin = call(?glGetLightfv, <>), ParamsLen = glGetLightfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getLightiv %% Args: Light, Pname %% Returns: [Params] %% C-API func: void glGetLightiv(GLenum light, GLenum pname, GLint * params) getLightiv(Light, Pname) -> Bin = call(?glGetLightiv, <>), ParamsLen = glGetLightivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getMapdv %% Args: Target, Query, #sdlmem{} = V %% Returns: ok %% C-API func: void glGetMapdv(GLenum target, GLenum query, GLdouble * v) getMapdv(Target, Query, #sdlmem{bin=V}) -> sdl:send_bin(V, ?MODULE, ?LINE), cast(?glGetMapdv, <>). %% Func: getMapfv %% Args: Target, Query, #sdlmem{} = V %% Returns: ok %% C-API func: void glGetMapfv(GLenum target, GLenum query, GLfloat * v) getMapfv(Target, Query, #sdlmem{bin=V}) -> sdl:send_bin(V, ?MODULE, ?LINE), cast(?glGetMapfv, <>). %% Func: getMapiv %% Args: Target, Query, #sdlmem{} = V %% Returns: ok %% C-API func: void glGetMapiv(GLenum target, GLenum query, GLint * v) getMapiv(Target, Query, #sdlmem{bin=V}) -> sdl:send_bin(V, ?MODULE, ?LINE), cast(?glGetMapiv, <>). %% Func: getMaterialfv %% Args: Face, Pname %% Returns: [Params] %% C-API func: void glGetMaterialfv(GLenum face, GLenum pname, GLfloat * params) getMaterialfv(Face, Pname) -> Bin = call(?glGetMaterialfv, <>), ParamsLen = glGetMaterialfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getMaterialiv %% Args: Face, Pname %% Returns: [Params] %% C-API func: void glGetMaterialiv(GLenum face, GLenum pname, GLint * params) getMaterialiv(Face, Pname) -> Bin = call(?glGetMaterialiv, <>), ParamsLen = glGetMaterialivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getPixelMapfv %% Args: Map, #sdlmem{} = Values %% Returns: ok %% C-API func: void glGetPixelMapfv(GLenum map, GLfloat * values) getPixelMapfv(Map, #sdlmem{bin=Values}) -> sdl:send_bin(Values, ?MODULE, ?LINE), cast(?glGetPixelMapfv, <>). %% Func: getPixelMapuiv %% Args: Map, #sdlmem{} = Values %% Returns: ok %% C-API func: void glGetPixelMapuiv(GLenum map, GLuint * values) getPixelMapuiv(Map, #sdlmem{bin=Values}) -> sdl:send_bin(Values, ?MODULE, ?LINE), cast(?glGetPixelMapuiv, <>). %% Func: getPixelMapusv %% Args: Map, #sdlmem{} = Values %% Returns: ok %% C-API func: void glGetPixelMapusv(GLenum map, GLushort * values) getPixelMapusv(Map, #sdlmem{bin=Values}) -> sdl:send_bin(Values, ?MODULE, ?LINE), cast(?glGetPixelMapusv, <>). %% Func: getPointerv %% Args: Pname %% Returns: Params=#sdlmem{} %% C-API func: void glGetPointerv(GLenum pname, GLvoid* *params) getPointerv(Pname) -> Bin = call(?glGetPointerv, <>), case Bin of <> -> erlang:fault({nyi, ?MODULE,?LINE}); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getPolygonStipple %% Args: %% Returns: [Mask] %% C-API func: void glGetPolygonStipple(GLubyte * mask) getPolygonStipple() -> Bin = call(?glGetPolygonStipple, []), case Bin of <> -> bin2list(128, ?GL_UNSIGNED_BYTE, Mask); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getString %% Args: Name %% Returns: [?GL_UNSIGNED_BYTE] %% C-API func: GLubyte* glGetString(GLenum name) getString(Name) -> Bin = call(?glGetString, <>), case Bin of Ret -> bin2list(undefined,?GL_UNSIGNED_BYTE,Ret); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexEnvfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat * params) getTexEnvfv(Target, Pname) -> Bin = call(?glGetTexEnvfv, <>), ParamsLen = glGetTexEnvfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexEnviv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetTexEnviv(GLenum target, GLenum pname, GLint * params) getTexEnviv(Target, Pname) -> Bin = call(?glGetTexEnviv, <>), ParamsLen = glGetTexEnvivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexGendv %% Args: Coord, Pname %% Returns: [Params] %% C-API func: void glGetTexGendv(GLenum coord, GLenum pname, GLdouble * params) getTexGendv(Coord, Pname) -> Bin = call(?glGetTexGendv, <>), ParamsLen = glGetTexGendvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_DOUBLE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexGenfv %% Args: Coord, Pname %% Returns: [Params] %% C-API func: void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat * params) getTexGenfv(Coord, Pname) -> Bin = call(?glGetTexGenfv, <>), ParamsLen = glGetTexGenfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexGeniv %% Args: Coord, Pname %% Returns: [Params] %% C-API func: void glGetTexGeniv(GLenum coord, GLenum pname, GLint * params) getTexGeniv(Coord, Pname) -> Bin = call(?glGetTexGeniv, <>), ParamsLen = glGetTexGenivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexImage %% Args: Target, Level, Format, Type, #sdlmem{} = Pixels %% Returns: ok %% C-API func: void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels) getTexImage(Target, Level, Format, Type, #sdlmem{bin=Pixels}) -> sdl:send_bin(Pixels, ?MODULE, ?LINE), cast(?glGetTexImage, <>). %% Func: getTexLevelParameterfv %% Args: Target, Level, Pname %% Returns: [Params] %% C-API func: void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat * params) getTexLevelParameterfv(Target, Level, Pname) -> Bin = call(?glGetTexLevelParameterfv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexLevelParameteriv %% Args: Target, Level, Pname %% Returns: [Params] %% C-API func: void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint * params) getTexLevelParameteriv(Target, Level, Pname) -> Bin = call(?glGetTexLevelParameteriv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexParameterfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) getTexParameterfv(Target, Pname) -> Bin = call(?glGetTexParameterfv, <>), ParamsLen = glGetTexParameterfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getTexParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) getTexParameteriv(Target, Pname) -> Bin = call(?glGetTexParameteriv, <>), ParamsLen = glGetTexParameterivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: hint %% Args: Target, Mode %% Returns: ok %% C-API func: void glHint(GLenum target, GLenum mode) hint(Target, Mode) -> cast(?glHint, <>). %% Func: indexMask %% Args: Mask %% Returns: ok %% C-API func: void glIndexMask(GLuint mask) indexMask(Mask) -> cast(?glIndexMask, <>). %% Func: indexPointer %% Args: Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glIndexPointer(GLenum type, GLsizei stride, const GLvoid * pointer) indexPointer(Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glIndexPointer, [<>]). %% Func: indexd %% Args: C %% Returns: ok %% C-API func: void glIndexd(GLdouble c) indexd(C) -> cast(?glIndexd, <>). %% Func: indexdv %% Args: <<[C]>> %% Returns: ok %% C-API func: void glIndexdv( const GLdouble * c) indexdv(C) -> NewC = if is_list(C) ; is_tuple(C) -> term2bin(C, 1, ?GL_DOUBLE); binary(C) -> C; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, C}) end, cast(?glIndexdv, [ NewC]). %% Func: indexf %% Args: C %% Returns: ok %% C-API func: void glIndexf(GLfloat c) indexf(C) -> cast(?glIndexf, <>). %% Func: indexfv %% Args: <<[C]>> %% Returns: ok %% C-API func: void glIndexfv( const GLfloat * c) indexfv(C) -> NewC = if is_list(C) ; is_tuple(C) -> term2bin(C, 1, ?GL_FLOAT); binary(C) -> C; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, C}) end, cast(?glIndexfv, [ NewC]). %% Func: indexi %% Args: C %% Returns: ok %% C-API func: void glIndexi(GLint c) indexi(C) -> cast(?glIndexi, <>). %% Func: indexiv %% Args: <<[C]>> %% Returns: ok %% C-API func: void glIndexiv( const GLint * c) indexiv(C) -> NewC = if is_list(C) ; is_tuple(C) -> term2bin(C, 1, ?GL_INT); binary(C) -> C; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, C}) end, cast(?glIndexiv, [ NewC]). %% Func: indexs %% Args: C %% Returns: ok %% C-API func: void glIndexs(GLshort c) indexs(C) -> cast(?glIndexs, <>). %% Func: indexsv %% Args: <<[C]>> %% Returns: ok %% C-API func: void glIndexsv( const GLshort * c) indexsv(C) -> NewC = if is_list(C) ; is_tuple(C) -> term2bin(C, 1, ?GL_SHORT); binary(C) -> C; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, C}) end, cast(?glIndexsv, [ NewC]). %% Func: indexub %% Args: C %% Returns: ok %% C-API func: void glIndexub(GLubyte c) indexub(C) -> cast(?glIndexub, <>). %% Func: indexubv %% Args: <<[C]>> %% Returns: ok %% C-API func: void glIndexubv( const GLubyte * c) indexubv(C) -> NewC = if is_list(C) ; is_tuple(C) -> term2bin(C, 1, ?GL_UNSIGNED_BYTE); binary(C) -> C; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, C}) end, cast(?glIndexubv, [ NewC]). %% Func: initNames %% Args: %% Returns: ok %% C-API func: void glInitNames() initNames() -> cast(?glInitNames, []). %% Func: interleavedArrays %% Args: Format, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid * pointer) interleavedArrays(Format, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glInterleavedArrays, [<>]). %% Func: isEnabled %% Args: Cap %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsEnabled(GLenum cap) isEnabled(Cap) -> Bin = call(?glIsEnabled, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isList %% Args: List %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsList(GLuint list) isList(List) -> Bin = call(?glIsList, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isTexture %% Args: Texture %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsTexture(GLuint texture) isTexture(Texture) -> Bin = call(?glIsTexture, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: lightModelf %% Args: Pname, Param %% Returns: ok %% C-API func: void glLightModelf(GLenum pname, GLfloat param) lightModelf(Pname, Param) -> cast(?glLightModelf, <>). %% Func: lightModelfv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glLightModelfv(GLenum pname, const GLfloat * params) lightModelfv(Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glLightModelfv, [<>,NewParams]). %% Func: lightModeli %% Args: Pname, Param %% Returns: ok %% C-API func: void glLightModeli(GLenum pname, GLint param) lightModeli(Pname, Param) -> cast(?glLightModeli, <>). %% Func: lightModeliv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glLightModeliv(GLenum pname, const GLint * params) lightModeliv(Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glLightModeliv, [<>,NewParams]). %% Func: lightf %% Args: Light, Pname, Param %% Returns: ok %% C-API func: void glLightf(GLenum light, GLenum pname, GLfloat param) lightf(Light, Pname, Param) -> cast(?glLightf, <>). %% Func: lightfv %% Args: Light, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glLightfv(GLenum light, GLenum pname, const GLfloat * params) lightfv(Light, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glLightfv, [<>,NewParams]). %% Func: lighti %% Args: Light, Pname, Param %% Returns: ok %% C-API func: void glLighti(GLenum light, GLenum pname, GLint param) lighti(Light, Pname, Param) -> cast(?glLighti, <>). %% Func: lightiv %% Args: Light, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glLightiv(GLenum light, GLenum pname, const GLint * params) lightiv(Light, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glLightiv, [<>,NewParams]). %% Func: lineStipple %% Args: Factor, Pattern %% Returns: ok %% C-API func: void glLineStipple(GLint factor, GLushort pattern) lineStipple(Factor, Pattern) -> cast(?glLineStipple, <>). %% Func: lineWidth %% Args: Width %% Returns: ok %% C-API func: void glLineWidth(GLfloat width) lineWidth(Width) -> cast(?glLineWidth, <>). %% Func: listBase %% Args: Base %% Returns: ok %% C-API func: void glListBase(GLuint base) listBase(Base) -> cast(?glListBase, <>). %% Func: loadIdentity %% Args: %% Returns: ok %% C-API func: void glLoadIdentity() loadIdentity() -> cast(?glLoadIdentity, []). %% Func: loadMatrixd %% Args: <<[M]>> %% Returns: ok %% C-API func: void glLoadMatrixd( const GLdouble * m) loadMatrixd(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_DOUBLE); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glLoadMatrixd, [ NewM]). %% Func: loadMatrixf %% Args: <<[M]>> %% Returns: ok %% C-API func: void glLoadMatrixf( const GLfloat * m) loadMatrixf(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_FLOAT); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glLoadMatrixf, [ NewM]). %% Func: loadName %% Args: Name %% Returns: ok %% C-API func: void glLoadName(GLuint name) loadName(Name) -> cast(?glLoadName, <>). %% Func: logicOp %% Args: Opcode %% Returns: ok %% C-API func: void glLogicOp(GLenum opcode) logicOp(Opcode) -> cast(?glLogicOp, <>). %% Func: map1d %% Args: Target, U1, U2, Stride, Order, <<[Points]>> %% Returns: ok %% C-API func: void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points) map1d(Target, U1, U2, Stride, Order, Points) -> NewPoints = if is_list(Points) -> PointsLen = length(Points), [<>, term2bin(Points, PointsLen, ?GL_DOUBLE)]; is_tuple(Points) -> PointsLen = size(Points), [<>, term2bin(Points, PointsLen, ?GL_DOUBLE)]; is_binary(Points) -> [<<(size(Points) div 8):32/native>>,Points]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Points}) end, cast(?glMap1d, [<>,NewPoints]). %% Func: map1f %% Args: Target, U1, U2, Stride, Order, <<[Points]>> %% Returns: ok %% C-API func: void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points) map1f(Target, U1, U2, Stride, Order, Points) -> NewPoints = if is_list(Points) -> PointsLen = length(Points), [<>, term2bin(Points, PointsLen, ?GL_FLOAT)]; is_tuple(Points) -> PointsLen = size(Points), [<>, term2bin(Points, PointsLen, ?GL_FLOAT)]; is_binary(Points) -> [<<(size(Points) div 4):32/native>>,Points]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Points}) end, cast(?glMap1f, [<>,NewPoints]). %% Func: map2d %% Args: Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, <<[Points]>> %% Returns: ok %% C-API func: void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points) map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> NewPoints = if is_list(Points) -> PointsLen = length(Points), [<>, term2bin(Points, PointsLen, ?GL_DOUBLE)]; is_tuple(Points) -> PointsLen = size(Points), [<>, term2bin(Points, PointsLen, ?GL_DOUBLE)]; is_binary(Points) -> [<<(size(Points) div 8):32/native>>,Points]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Points}) end, cast(?glMap2d, [<>,NewPoints]). %% Func: map2f %% Args: Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, <<[Points]>> %% Returns: ok %% C-API func: void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points) map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder, Points) -> NewPoints = if is_list(Points) -> PointsLen = length(Points), [<>, term2bin(Points, PointsLen, ?GL_FLOAT)]; is_tuple(Points) -> PointsLen = size(Points), [<>, term2bin(Points, PointsLen, ?GL_FLOAT)]; is_binary(Points) -> [<<(size(Points) div 4):32/native>>,Points]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Points}) end, cast(?glMap2f, [<>,NewPoints]). %% Func: mapGrid1d %% Args: Un, U1, U2 %% Returns: ok %% C-API func: void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2) mapGrid1d(Un, U1, U2) -> cast(?glMapGrid1d, <>). %% Func: mapGrid1f %% Args: Un, U1, U2 %% Returns: ok %% C-API func: void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2) mapGrid1f(Un, U1, U2) -> cast(?glMapGrid1f, <>). %% Func: mapGrid2d %% Args: Un, U1, U2, Vn, V1, V2 %% Returns: ok %% C-API func: void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) mapGrid2d(Un, U1, U2, Vn, V1, V2) -> cast(?glMapGrid2d, <>). %% Func: mapGrid2f %% Args: Un, U1, U2, Vn, V1, V2 %% Returns: ok %% C-API func: void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) mapGrid2f(Un, U1, U2, Vn, V1, V2) -> cast(?glMapGrid2f, <>). %% Func: materialf %% Args: Face, Pname, Param %% Returns: ok %% C-API func: void glMaterialf(GLenum face, GLenum pname, GLfloat param) materialf(Face, Pname, Param) -> cast(?glMaterialf, <>). %% Func: materialfv %% Args: Face, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glMaterialfv(GLenum face, GLenum pname, const GLfloat * params) materialfv(Face, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glMaterialfv, [<>,NewParams]). %% Func: materiali %% Args: Face, Pname, Param %% Returns: ok %% C-API func: void glMateriali(GLenum face, GLenum pname, GLint param) materiali(Face, Pname, Param) -> cast(?glMateriali, <>). %% Func: materialiv %% Args: Face, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glMaterialiv(GLenum face, GLenum pname, const GLint * params) materialiv(Face, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glMaterialiv, [<>,NewParams]). %% Func: matrixMode %% Args: Mode %% Returns: ok %% C-API func: void glMatrixMode(GLenum mode) matrixMode(Mode) -> cast(?glMatrixMode, <>). %% Func: multMatrixd %% Args: <<[M]>> %% Returns: ok %% C-API func: void glMultMatrixd( const GLdouble * m) multMatrixd(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_DOUBLE); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glMultMatrixd, [ NewM]). %% Func: multMatrixf %% Args: <<[M]>> %% Returns: ok %% C-API func: void glMultMatrixf( const GLfloat * m) multMatrixf(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_FLOAT); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glMultMatrixf, [ NewM]). %% Func: newList %% Args: List, Mode %% Returns: ok %% C-API func: void glNewList(GLuint list, GLenum mode) newList(List, Mode) -> cast(?glNewList, <>). %% Func: normal3b %% Args: Nx, Ny, Nz %% Returns: ok %% C-API func: void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz) normal3b(Nx, Ny, Nz) -> cast(?glNormal3bv, <>). %% Func: normal3bv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glNormal3bv( const GLbyte * v) normal3bv({V1,V2,V3}) -> cast(?glNormal3bv, <>). %% Func: normal3d %% Args: Nx, Ny, Nz %% Returns: ok %% C-API func: void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz) normal3d(Nx, Ny, Nz) -> cast(?glNormal3dv, <>). %% Func: normal3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glNormal3dv( const GLdouble * v) normal3dv({V1,V2,V3}) -> cast(?glNormal3dv, <>). %% Func: normal3f %% Args: Nx, Ny, Nz %% Returns: ok %% C-API func: void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) normal3f(Nx, Ny, Nz) -> cast(?glNormal3fv, <>). %% Func: normal3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glNormal3fv( const GLfloat * v) normal3fv({V1,V2,V3}) -> cast(?glNormal3fv, <>). %% Func: normal3i %% Args: Nx, Ny, Nz %% Returns: ok %% C-API func: void glNormal3i(GLint nx, GLint ny, GLint nz) normal3i(Nx, Ny, Nz) -> cast(?glNormal3iv, <>). %% Func: normal3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glNormal3iv( const GLint * v) normal3iv({V1,V2,V3}) -> cast(?glNormal3iv, <>). %% Func: normal3s %% Args: Nx, Ny, Nz %% Returns: ok %% C-API func: void glNormal3s(GLshort nx, GLshort ny, GLshort nz) normal3s(Nx, Ny, Nz) -> cast(?glNormal3sv, <>). %% Func: normal3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glNormal3sv( const GLshort * v) normal3sv({V1,V2,V3}) -> cast(?glNormal3sv, <>). %% Func: normalPointer %% Args: Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glNormalPointer(GLenum type, GLsizei stride, const GLvoid * pointer) normalPointer(Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glNormalPointer, [<>]). %% Func: ortho %% Args: Left, Right, Bottom, Top, ZNear, ZFar %% Returns: ok %% C-API func: void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) ortho(Left, Right, Bottom, Top, ZNear, ZFar) -> cast(?glOrtho, <>). %% Func: passThrough %% Args: Token %% Returns: ok %% C-API func: void glPassThrough(GLfloat token) passThrough(Token) -> cast(?glPassThrough, <>). %% Func: pixelMapfv %% Args: Map, Mapsize, <<[Values]>> %% Returns: ok %% C-API func: void glPixelMapfv(GLenum map, GLint mapsize, const GLfloat * values) pixelMapfv(Map, Mapsize, Values) -> NewValues = if is_list(Values) ; is_tuple(Values) -> term2bin(Values, Mapsize, ?GL_FLOAT); is_binary(Values) -> Values; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Values}) end, cast(?glPixelMapfv, [<>,NewValues]). %% Func: pixelMapuiv %% Args: Map, Mapsize, <<[Values]>> %% Returns: ok %% C-API func: void glPixelMapuiv(GLenum map, GLint mapsize, const GLuint * values) pixelMapuiv(Map, Mapsize, Values) -> NewValues = if is_list(Values) ; is_tuple(Values) -> term2bin(Values, Mapsize, ?GL_UNSIGNED_INT); is_binary(Values) -> Values; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Values}) end, cast(?glPixelMapuiv, [<>,NewValues]). %% Func: pixelMapusv %% Args: Map, Mapsize, <<[Values]>> %% Returns: ok %% C-API func: void glPixelMapusv(GLenum map, GLint mapsize, const GLushort * values) pixelMapusv(Map, Mapsize, Values) -> NewValues = if is_list(Values) ; is_tuple(Values) -> term2bin(Values, Mapsize, ?GL_UNSIGNED_SHORT); is_binary(Values) -> Values; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Values}) end, cast(?glPixelMapusv, [<>,NewValues]). %% Func: pixelStoref %% Args: Pname, Param %% Returns: ok %% C-API func: void glPixelStoref(GLenum pname, GLfloat param) pixelStoref(Pname, Param) -> cast(?glPixelStoref, <>). %% Func: pixelStorei %% Args: Pname, Param %% Returns: ok %% C-API func: void glPixelStorei(GLenum pname, GLint param) pixelStorei(Pname, Param) -> cast(?glPixelStorei, <>). %% Func: pixelTransferf %% Args: Pname, Param %% Returns: ok %% C-API func: void glPixelTransferf(GLenum pname, GLfloat param) pixelTransferf(Pname, Param) -> cast(?glPixelTransferf, <>). %% Func: pixelTransferi %% Args: Pname, Param %% Returns: ok %% C-API func: void glPixelTransferi(GLenum pname, GLint param) pixelTransferi(Pname, Param) -> cast(?glPixelTransferi, <>). %% Func: pixelZoom %% Args: Xfactor, Yfactor %% Returns: ok %% C-API func: void glPixelZoom(GLfloat xfactor, GLfloat yfactor) pixelZoom(Xfactor, Yfactor) -> cast(?glPixelZoom, <>). %% Func: pointSize %% Args: Size %% Returns: ok %% C-API func: void glPointSize(GLfloat size) pointSize(Size) -> cast(?glPointSize, <>). %% Func: polygonMode %% Args: Face, Mode %% Returns: ok %% C-API func: void glPolygonMode(GLenum face, GLenum mode) polygonMode(Face, Mode) -> cast(?glPolygonMode, <>). %% Func: polygonOffset %% Args: Factor, Units %% Returns: ok %% C-API func: void glPolygonOffset(GLfloat factor, GLfloat units) polygonOffset(Factor, Units) -> cast(?glPolygonOffset, <>). %% Func: polygonStipple %% Args: <<[Mask]>> %% Returns: ok %% C-API func: void glPolygonStipple( const GLubyte * mask) polygonStipple(Mask) -> NewMask = if is_list(Mask) ; is_tuple(Mask) -> term2bin(Mask, 128, ?GL_UNSIGNED_BYTE); binary(Mask) -> Mask; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Mask}) end, cast(?glPolygonStipple, [ NewMask]). %% Func: popAttrib %% Args: %% Returns: ok %% C-API func: void glPopAttrib() popAttrib() -> cast(?glPopAttrib, []). %% Func: popClientAttrib %% Args: %% Returns: ok %% C-API func: void glPopClientAttrib() popClientAttrib() -> cast(?glPopClientAttrib, []). %% Func: popMatrix %% Args: %% Returns: ok %% C-API func: void glPopMatrix() popMatrix() -> cast(?glPopMatrix, []). %% Func: popName %% Args: %% Returns: ok %% C-API func: void glPopName() popName() -> cast(?glPopName, []). %% Func: prioritizeTextures %% Args: N, <<[Textures]>>, <<[Priorities]>> %% Returns: ok %% C-API func: void glPrioritizeTextures(GLsizei n, const GLuint * textures, const GLclampf * priorities) prioritizeTextures(N, Textures, Priorities) -> NewTextures = if is_list(Textures) ; is_tuple(Textures) -> term2bin(Textures, N, ?GL_UNSIGNED_INT); is_binary(Textures) -> Textures; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Textures}) end, NewPriorities = if is_list(Priorities) ; is_tuple(Priorities) -> term2bin(Priorities, N, ?GL_FLOAT); is_binary(Priorities) -> Priorities; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Priorities}) end, cast(?glPrioritizeTextures, [<>,NewTextures, NewPriorities]). %% Func: pushAttrib %% Args: Mask %% Returns: ok %% C-API func: void glPushAttrib(GLbitfield mask) pushAttrib(Mask) -> cast(?glPushAttrib, <>). %% Func: pushClientAttrib %% Args: Mask %% Returns: ok %% C-API func: void glPushClientAttrib(GLbitfield mask) pushClientAttrib(Mask) -> cast(?glPushClientAttrib, <>). %% Func: pushMatrix %% Args: %% Returns: ok %% C-API func: void glPushMatrix() pushMatrix() -> cast(?glPushMatrix, []). %% Func: pushName %% Args: Name %% Returns: ok %% C-API func: void glPushName(GLuint name) pushName(Name) -> cast(?glPushName, <>). %% Func: rasterPos2d %% Args: X, Y %% Returns: ok %% C-API func: void glRasterPos2d(GLdouble x, GLdouble y) rasterPos2d(X, Y) -> cast(?glRasterPos2dv, <>). %% Func: rasterPos2dv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glRasterPos2dv( const GLdouble * v) rasterPos2dv({V1,V2}) -> cast(?glRasterPos2dv, <>). %% Func: rasterPos2f %% Args: X, Y %% Returns: ok %% C-API func: void glRasterPos2f(GLfloat x, GLfloat y) rasterPos2f(X, Y) -> cast(?glRasterPos2fv, <>). %% Func: rasterPos2fv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glRasterPos2fv( const GLfloat * v) rasterPos2fv({V1,V2}) -> cast(?glRasterPos2fv, <>). %% Func: rasterPos2i %% Args: X, Y %% Returns: ok %% C-API func: void glRasterPos2i(GLint x, GLint y) rasterPos2i(X, Y) -> cast(?glRasterPos2iv, <>). %% Func: rasterPos2iv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glRasterPos2iv( const GLint * v) rasterPos2iv({V1,V2}) -> cast(?glRasterPos2iv, <>). %% Func: rasterPos2s %% Args: X, Y %% Returns: ok %% C-API func: void glRasterPos2s(GLshort x, GLshort y) rasterPos2s(X, Y) -> cast(?glRasterPos2sv, <>). %% Func: rasterPos2sv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glRasterPos2sv( const GLshort * v) rasterPos2sv({V1,V2}) -> cast(?glRasterPos2sv, <>). %% Func: rasterPos3d %% Args: X, Y, Z %% Returns: ok %% C-API func: void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z) rasterPos3d(X, Y, Z) -> cast(?glRasterPos3dv, <>). %% Func: rasterPos3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glRasterPos3dv( const GLdouble * v) rasterPos3dv({V1,V2,V3}) -> cast(?glRasterPos3dv, <>). %% Func: rasterPos3f %% Args: X, Y, Z %% Returns: ok %% C-API func: void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z) rasterPos3f(X, Y, Z) -> cast(?glRasterPos3fv, <>). %% Func: rasterPos3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glRasterPos3fv( const GLfloat * v) rasterPos3fv({V1,V2,V3}) -> cast(?glRasterPos3fv, <>). %% Func: rasterPos3i %% Args: X, Y, Z %% Returns: ok %% C-API func: void glRasterPos3i(GLint x, GLint y, GLint z) rasterPos3i(X, Y, Z) -> cast(?glRasterPos3iv, <>). %% Func: rasterPos3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glRasterPos3iv( const GLint * v) rasterPos3iv({V1,V2,V3}) -> cast(?glRasterPos3iv, <>). %% Func: rasterPos3s %% Args: X, Y, Z %% Returns: ok %% C-API func: void glRasterPos3s(GLshort x, GLshort y, GLshort z) rasterPos3s(X, Y, Z) -> cast(?glRasterPos3sv, <>). %% Func: rasterPos3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glRasterPos3sv( const GLshort * v) rasterPos3sv({V1,V2,V3}) -> cast(?glRasterPos3sv, <>). %% Func: rasterPos4d %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) rasterPos4d(X, Y, Z, W) -> cast(?glRasterPos4dv, <>). %% Func: rasterPos4dv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glRasterPos4dv( const GLdouble * v) rasterPos4dv({V1,V2,V3,V4}) -> cast(?glRasterPos4dv, <>). %% Func: rasterPos4f %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) rasterPos4f(X, Y, Z, W) -> cast(?glRasterPos4fv, <>). %% Func: rasterPos4fv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glRasterPos4fv( const GLfloat * v) rasterPos4fv({V1,V2,V3,V4}) -> cast(?glRasterPos4fv, <>). %% Func: rasterPos4i %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glRasterPos4i(GLint x, GLint y, GLint z, GLint w) rasterPos4i(X, Y, Z, W) -> cast(?glRasterPos4iv, <>). %% Func: rasterPos4iv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glRasterPos4iv( const GLint * v) rasterPos4iv({V1,V2,V3,V4}) -> cast(?glRasterPos4iv, <>). %% Func: rasterPos4s %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) rasterPos4s(X, Y, Z, W) -> cast(?glRasterPos4sv, <>). %% Func: rasterPos4sv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glRasterPos4sv( const GLshort * v) rasterPos4sv({V1,V2,V3,V4}) -> cast(?glRasterPos4sv, <>). %% Func: readBuffer %% Args: Mode %% Returns: ok %% C-API func: void glReadBuffer(GLenum mode) readBuffer(Mode) -> cast(?glReadBuffer, <>). %% Func: readPixels %% Args: X, Y, Width, Height, Format, Type, #sdlmem{} = Pixels %% Returns: ok %% C-API func: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels) readPixels(X, Y, Width, Height, Format, Type, #sdlmem{bin=Pixels}) -> sdl:send_bin(Pixels, ?MODULE, ?LINE), cast(?glReadPixels, <>). %% Func: rectd %% Args: X1, Y1, X2, Y2 %% Returns: ok %% C-API func: void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) rectd(X1, Y1, X2, Y2) -> cast(?glRectd, <>). %% Func: rectdv %% Args: <<[V1]>>, <<[V2]>> %% Returns: ok %% C-API func: void glRectdv( const GLdouble * v1, const GLdouble * v2) rectdv(V1, V2) -> NewV1 = if is_list(V1) ; is_tuple(V1) -> term2bin(V1, 2, ?GL_DOUBLE); binary(V1) -> V1; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V1}) end, NewV2 = if is_list(V2) ; is_tuple(V2) -> term2bin(V2, 2, ?GL_DOUBLE); binary(V2) -> V2; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V2}) end, cast(?glRectdv, [ NewV1, NewV2]). %% Func: rectf %% Args: X1, Y1, X2, Y2 %% Returns: ok %% C-API func: void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) rectf(X1, Y1, X2, Y2) -> cast(?glRectf, <>). %% Func: rectfv %% Args: <<[V1]>>, <<[V2]>> %% Returns: ok %% C-API func: void glRectfv( const GLfloat * v1, const GLfloat * v2) rectfv(V1, V2) -> NewV1 = if is_list(V1) ; is_tuple(V1) -> term2bin(V1, 2, ?GL_FLOAT); binary(V1) -> V1; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V1}) end, NewV2 = if is_list(V2) ; is_tuple(V2) -> term2bin(V2, 2, ?GL_FLOAT); binary(V2) -> V2; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V2}) end, cast(?glRectfv, [ NewV1, NewV2]). %% Func: recti %% Args: X1, Y1, X2, Y2 %% Returns: ok %% C-API func: void glRecti(GLint x1, GLint y1, GLint x2, GLint y2) recti(X1, Y1, X2, Y2) -> cast(?glRecti, <>). %% Func: rectiv %% Args: <<[V1]>>, <<[V2]>> %% Returns: ok %% C-API func: void glRectiv( const GLint * v1, const GLint * v2) rectiv(V1, V2) -> NewV1 = if is_list(V1) ; is_tuple(V1) -> term2bin(V1, 2, ?GL_INT); binary(V1) -> V1; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V1}) end, NewV2 = if is_list(V2) ; is_tuple(V2) -> term2bin(V2, 2, ?GL_INT); binary(V2) -> V2; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V2}) end, cast(?glRectiv, [ NewV1, NewV2]). %% Func: rects %% Args: X1, Y1, X2, Y2 %% Returns: ok %% C-API func: void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2) rects(X1, Y1, X2, Y2) -> cast(?glRects, <>). %% Func: rectsv %% Args: <<[V1]>>, <<[V2]>> %% Returns: ok %% C-API func: void glRectsv( const GLshort * v1, const GLshort * v2) rectsv(V1, V2) -> NewV1 = if is_list(V1) ; is_tuple(V1) -> term2bin(V1, 2, ?GL_SHORT); binary(V1) -> V1; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V1}) end, NewV2 = if is_list(V2) ; is_tuple(V2) -> term2bin(V2, 2, ?GL_SHORT); binary(V2) -> V2; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V2}) end, cast(?glRectsv, [ NewV1, NewV2]). %% Func: renderMode %% Args: Mode %% Returns: ?GL_INT %% C-API func: GLint glRenderMode(GLenum mode) renderMode(Mode) -> Bin = call(?glRenderMode, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: rotated %% Args: Angle, X, Y, Z %% Returns: ok %% C-API func: void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) rotated(Angle, X, Y, Z) -> cast(?glRotated, <>). %% Func: rotatef %% Args: Angle, X, Y, Z %% Returns: ok %% C-API func: void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) rotatef(Angle, X, Y, Z) -> cast(?glRotatef, <>). %% Func: scaled %% Args: X, Y, Z %% Returns: ok %% C-API func: void glScaled(GLdouble x, GLdouble y, GLdouble z) scaled(X, Y, Z) -> cast(?glScaled, <>). %% Func: scalef %% Args: X, Y, Z %% Returns: ok %% C-API func: void glScalef(GLfloat x, GLfloat y, GLfloat z) scalef(X, Y, Z) -> cast(?glScalef, <>). %% Func: scissor %% Args: X, Y, Width, Height %% Returns: ok %% C-API func: void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) scissor(X, Y, Width, Height) -> cast(?glScissor, <>). %% Func: selectBuffer %% Args: Size, #sdlmem{} = Buffer %% Returns: ok %% C-API func: void glSelectBuffer(GLsizei size, GLuint * buffer) selectBuffer(Size, #sdlmem{bin=Buffer}) -> sdl:send_bin(Buffer, ?MODULE, ?LINE), cast(?glSelectBuffer, <>). %% Func: shadeModel %% Args: Mode %% Returns: ok %% C-API func: void glShadeModel(GLenum mode) shadeModel(Mode) -> cast(?glShadeModel, <>). %% Func: stencilFunc %% Args: Func, Ref, Mask %% Returns: ok %% C-API func: void glStencilFunc(GLenum func, GLint ref, GLuint mask) stencilFunc(Func, Ref, Mask) -> cast(?glStencilFunc, <>). %% Func: stencilMask %% Args: Mask %% Returns: ok %% C-API func: void glStencilMask(GLuint mask) stencilMask(Mask) -> cast(?glStencilMask, <>). %% Func: stencilOp %% Args: Fail, Zfail, Zpass %% Returns: ok %% C-API func: void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) stencilOp(Fail, Zfail, Zpass) -> cast(?glStencilOp, <>). %% Func: texCoord1d %% Args: S %% Returns: ok %% C-API func: void glTexCoord1d(GLdouble s) texCoord1d(S) -> cast(?glTexCoord1dv, <>). %% Func: texCoord1dv %% Args: {V1} %% Returns: ok %% C-API func: void glTexCoord1dv( const GLdouble * v) texCoord1dv({V1}) -> cast(?glTexCoord1dv, <>). %% Func: texCoord1f %% Args: S %% Returns: ok %% C-API func: void glTexCoord1f(GLfloat s) texCoord1f(S) -> cast(?glTexCoord1fv, <>). %% Func: texCoord1fv %% Args: {V1} %% Returns: ok %% C-API func: void glTexCoord1fv( const GLfloat * v) texCoord1fv({V1}) -> cast(?glTexCoord1fv, <>). %% Func: texCoord1i %% Args: S %% Returns: ok %% C-API func: void glTexCoord1i(GLint s) texCoord1i(S) -> cast(?glTexCoord1iv, <>). %% Func: texCoord1iv %% Args: {V1} %% Returns: ok %% C-API func: void glTexCoord1iv( const GLint * v) texCoord1iv({V1}) -> cast(?glTexCoord1iv, <>). %% Func: texCoord1s %% Args: S %% Returns: ok %% C-API func: void glTexCoord1s(GLshort s) texCoord1s(S) -> cast(?glTexCoord1sv, <>). %% Func: texCoord1sv %% Args: {V1} %% Returns: ok %% C-API func: void glTexCoord1sv( const GLshort * v) texCoord1sv({V1}) -> cast(?glTexCoord1sv, <>). %% Func: texCoord2d %% Args: S, T %% Returns: ok %% C-API func: void glTexCoord2d(GLdouble s, GLdouble t) texCoord2d(S, T) -> cast(?glTexCoord2dv, <>). %% Func: texCoord2dv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glTexCoord2dv( const GLdouble * v) texCoord2dv({V1,V2}) -> cast(?glTexCoord2dv, <>). %% Func: texCoord2f %% Args: S, T %% Returns: ok %% C-API func: void glTexCoord2f(GLfloat s, GLfloat t) texCoord2f(S, T) -> cast(?glTexCoord2fv, <>). %% Func: texCoord2fv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glTexCoord2fv( const GLfloat * v) texCoord2fv({V1,V2}) -> cast(?glTexCoord2fv, <>). %% Func: texCoord2i %% Args: S, T %% Returns: ok %% C-API func: void glTexCoord2i(GLint s, GLint t) texCoord2i(S, T) -> cast(?glTexCoord2iv, <>). %% Func: texCoord2iv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glTexCoord2iv( const GLint * v) texCoord2iv({V1,V2}) -> cast(?glTexCoord2iv, <>). %% Func: texCoord2s %% Args: S, T %% Returns: ok %% C-API func: void glTexCoord2s(GLshort s, GLshort t) texCoord2s(S, T) -> cast(?glTexCoord2sv, <>). %% Func: texCoord2sv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glTexCoord2sv( const GLshort * v) texCoord2sv({V1,V2}) -> cast(?glTexCoord2sv, <>). %% Func: texCoord3d %% Args: S, T, R %% Returns: ok %% C-API func: void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r) texCoord3d(S, T, R) -> cast(?glTexCoord3dv, <>). %% Func: texCoord3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glTexCoord3dv( const GLdouble * v) texCoord3dv({V1,V2,V3}) -> cast(?glTexCoord3dv, <>). %% Func: texCoord3f %% Args: S, T, R %% Returns: ok %% C-API func: void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r) texCoord3f(S, T, R) -> cast(?glTexCoord3fv, <>). %% Func: texCoord3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glTexCoord3fv( const GLfloat * v) texCoord3fv({V1,V2,V3}) -> cast(?glTexCoord3fv, <>). %% Func: texCoord3i %% Args: S, T, R %% Returns: ok %% C-API func: void glTexCoord3i(GLint s, GLint t, GLint r) texCoord3i(S, T, R) -> cast(?glTexCoord3iv, <>). %% Func: texCoord3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glTexCoord3iv( const GLint * v) texCoord3iv({V1,V2,V3}) -> cast(?glTexCoord3iv, <>). %% Func: texCoord3s %% Args: S, T, R %% Returns: ok %% C-API func: void glTexCoord3s(GLshort s, GLshort t, GLshort r) texCoord3s(S, T, R) -> cast(?glTexCoord3sv, <>). %% Func: texCoord3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glTexCoord3sv( const GLshort * v) texCoord3sv({V1,V2,V3}) -> cast(?glTexCoord3sv, <>). %% Func: texCoord4d %% Args: S, T, R, Q %% Returns: ok %% C-API func: void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q) texCoord4d(S, T, R, Q) -> cast(?glTexCoord4dv, <>). %% Func: texCoord4dv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glTexCoord4dv( const GLdouble * v) texCoord4dv({V1,V2,V3,V4}) -> cast(?glTexCoord4dv, <>). %% Func: texCoord4f %% Args: S, T, R, Q %% Returns: ok %% C-API func: void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q) texCoord4f(S, T, R, Q) -> cast(?glTexCoord4fv, <>). %% Func: texCoord4fv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glTexCoord4fv( const GLfloat * v) texCoord4fv({V1,V2,V3,V4}) -> cast(?glTexCoord4fv, <>). %% Func: texCoord4i %% Args: S, T, R, Q %% Returns: ok %% C-API func: void glTexCoord4i(GLint s, GLint t, GLint r, GLint q) texCoord4i(S, T, R, Q) -> cast(?glTexCoord4iv, <>). %% Func: texCoord4iv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glTexCoord4iv( const GLint * v) texCoord4iv({V1,V2,V3,V4}) -> cast(?glTexCoord4iv, <>). %% Func: texCoord4s %% Args: S, T, R, Q %% Returns: ok %% C-API func: void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q) texCoord4s(S, T, R, Q) -> cast(?glTexCoord4sv, <>). %% Func: texCoord4sv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glTexCoord4sv( const GLshort * v) texCoord4sv({V1,V2,V3,V4}) -> cast(?glTexCoord4sv, <>). %% Func: texCoordPointer %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) texCoordPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glTexCoordPointer, [<>]). %% Func: texEnvf %% Args: Target, Pname, Param %% Returns: ok %% C-API func: void glTexEnvf(GLenum target, GLenum pname, GLfloat param) texEnvf(Target, Pname, Param) -> cast(?glTexEnvf, <>). %% Func: texEnvfv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexEnvfv(GLenum target, GLenum pname, const GLfloat * params) texEnvfv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexEnvfv, [<>,NewParams]). %% Func: texEnvi %% Args: Target, Pname, Param %% Returns: ok %% C-API func: void glTexEnvi(GLenum target, GLenum pname, GLint param) texEnvi(Target, Pname, Param) -> cast(?glTexEnvi, <>). %% Func: texEnviv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexEnviv(GLenum target, GLenum pname, const GLint * params) texEnviv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexEnviv, [<>,NewParams]). %% Func: texGend %% Args: Coord, Pname, Param %% Returns: ok %% C-API func: void glTexGend(GLenum coord, GLenum pname, GLdouble param) texGend(Coord, Pname, Param) -> cast(?glTexGend, <>). %% Func: texGendv %% Args: Coord, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexGendv(GLenum coord, GLenum pname, const GLdouble * params) texGendv(Coord, Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_DOUBLE); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexGendv, [<>,NewParams]). %% Func: texGenf %% Args: Coord, Pname, Param %% Returns: ok %% C-API func: void glTexGenf(GLenum coord, GLenum pname, GLfloat param) texGenf(Coord, Pname, Param) -> cast(?glTexGenf, <>). %% Func: texGenfv %% Args: Coord, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexGenfv(GLenum coord, GLenum pname, const GLfloat * params) texGenfv(Coord, Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_FLOAT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexGenfv, [<>,NewParams]). %% Func: texGeni %% Args: Coord, Pname, Param %% Returns: ok %% C-API func: void glTexGeni(GLenum coord, GLenum pname, GLint param) texGeni(Coord, Pname, Param) -> cast(?glTexGeni, <>). %% Func: texGeniv %% Args: Coord, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexGeniv(GLenum coord, GLenum pname, const GLint * params) texGeniv(Coord, Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_INT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexGeniv, [<>,NewParams]). %% Func: texImage1D %% Args: Target, Level, Internalformat, Width, Border, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels) texImage1D(Target, Level, Internalformat, Width, Border, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexImage1D, [<>]). %% Func: texImage2D %% Args: Target, Level, Internalformat, Width, Height, Border, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) texImage2D(Target, Level, Internalformat, Width, Height, Border, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexImage2D, [<>]). %% Func: texParameterf %% Args: Target, Pname, Param %% Returns: ok %% C-API func: void glTexParameterf(GLenum target, GLenum pname, GLfloat param) texParameterf(Target, Pname, Param) -> cast(?glTexParameterf, <>). %% Func: texParameterfv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) texParameterfv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexParameterfv, [<>,NewParams]). %% Func: texParameteri %% Args: Target, Pname, Param %% Returns: ok %% C-API func: void glTexParameteri(GLenum target, GLenum pname, GLint param) texParameteri(Target, Pname, Param) -> cast(?glTexParameteri, <>). %% Func: texParameteriv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glTexParameteriv(GLenum target, GLenum pname, const GLint * params) texParameteriv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glTexParameteriv, [<>,NewParams]). %% Func: texSubImage1D %% Args: Target, Level, Xoffset, Width, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexSubImage1D, [<>]). %% Func: texSubImage2D %% Args: Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexSubImage2D, [<>]). %% Func: translated %% Args: X, Y, Z %% Returns: ok %% C-API func: void glTranslated(GLdouble x, GLdouble y, GLdouble z) translated(X, Y, Z) -> cast(?glTranslated, <>). %% Func: translatef %% Args: X, Y, Z %% Returns: ok %% C-API func: void glTranslatef(GLfloat x, GLfloat y, GLfloat z) translatef(X, Y, Z) -> cast(?glTranslatef, <>). %% Func: vertex2d %% Args: X, Y %% Returns: ok %% C-API func: void glVertex2d(GLdouble x, GLdouble y) vertex2d(X, Y) -> cast(?glVertex2dv, <>). %% Func: vertex2dv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glVertex2dv( const GLdouble * v) vertex2dv({V1,V2}) -> cast(?glVertex2dv, <>). %% Func: vertex2f %% Args: X, Y %% Returns: ok %% C-API func: void glVertex2f(GLfloat x, GLfloat y) vertex2f(X, Y) -> cast(?glVertex2fv, <>). %% Func: vertex2fv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glVertex2fv( const GLfloat * v) vertex2fv({V1,V2}) -> cast(?glVertex2fv, <>). %% Func: vertex2i %% Args: X, Y %% Returns: ok %% C-API func: void glVertex2i(GLint x, GLint y) vertex2i(X, Y) -> cast(?glVertex2iv, <>). %% Func: vertex2iv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glVertex2iv( const GLint * v) vertex2iv({V1,V2}) -> cast(?glVertex2iv, <>). %% Func: vertex2s %% Args: X, Y %% Returns: ok %% C-API func: void glVertex2s(GLshort x, GLshort y) vertex2s(X, Y) -> cast(?glVertex2sv, <>). %% Func: vertex2sv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glVertex2sv( const GLshort * v) vertex2sv({V1,V2}) -> cast(?glVertex2sv, <>). %% Func: vertex3d %% Args: X, Y, Z %% Returns: ok %% C-API func: void glVertex3d(GLdouble x, GLdouble y, GLdouble z) vertex3d(X, Y, Z) -> cast(?glVertex3dv, <>). %% Func: vertex3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glVertex3dv( const GLdouble * v) vertex3dv({V1,V2,V3}) -> cast(?glVertex3dv, <>). %% Func: vertex3f %% Args: X, Y, Z %% Returns: ok %% C-API func: void glVertex3f(GLfloat x, GLfloat y, GLfloat z) vertex3f(X, Y, Z) -> cast(?glVertex3fv, <>). %% Func: vertex3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glVertex3fv( const GLfloat * v) vertex3fv({V1,V2,V3}) -> cast(?glVertex3fv, <>). %% Func: vertex3i %% Args: X, Y, Z %% Returns: ok %% C-API func: void glVertex3i(GLint x, GLint y, GLint z) vertex3i(X, Y, Z) -> cast(?glVertex3iv, <>). %% Func: vertex3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glVertex3iv( const GLint * v) vertex3iv({V1,V2,V3}) -> cast(?glVertex3iv, <>). %% Func: vertex3s %% Args: X, Y, Z %% Returns: ok %% C-API func: void glVertex3s(GLshort x, GLshort y, GLshort z) vertex3s(X, Y, Z) -> cast(?glVertex3sv, <>). %% Func: vertex3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glVertex3sv( const GLshort * v) vertex3sv({V1,V2,V3}) -> cast(?glVertex3sv, <>). %% Func: vertex4d %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) vertex4d(X, Y, Z, W) -> cast(?glVertex4dv, <>). %% Func: vertex4dv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertex4dv( const GLdouble * v) vertex4dv({V1,V2,V3,V4}) -> cast(?glVertex4dv, <>). %% Func: vertex4f %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) vertex4f(X, Y, Z, W) -> cast(?glVertex4fv, <>). %% Func: vertex4fv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertex4fv( const GLfloat * v) vertex4fv({V1,V2,V3,V4}) -> cast(?glVertex4fv, <>). %% Func: vertex4i %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glVertex4i(GLint x, GLint y, GLint z, GLint w) vertex4i(X, Y, Z, W) -> cast(?glVertex4iv, <>). %% Func: vertex4iv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertex4iv( const GLint * v) vertex4iv({V1,V2,V3,V4}) -> cast(?glVertex4iv, <>). %% Func: vertex4s %% Args: X, Y, Z, W %% Returns: ok %% C-API func: void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w) vertex4s(X, Y, Z, W) -> cast(?glVertex4sv, <>). %% Func: vertex4sv %% Args: {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertex4sv( const GLshort * v) vertex4sv({V1,V2,V3,V4}) -> cast(?glVertex4sv, <>). %% Func: vertexPointer %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) vertexPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glVertexPointer, [<>]). %% Func: viewport %% Args: X, Y, Width, Height %% Returns: ok %% C-API func: void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) viewport(X, Y, Width, Height) -> cast(?glViewport, <>). %%% OPENGL 1.2 and later with selected ARB's and extensions %%-module(glext). -include("glext_funcs.hrl"). glGetConvolutionParameterivLen(Pname) -> glGetConvolutionParameterfvLen(Pname). glGetConvolutionParameterfvLen(Pname) -> case Pname of ?GL_CONVOLUTION_BORDER_MODE -> 1; ?GL_CONVOLUTION_BORDER_COLOR -> 1; ?GL_CONVOLUTION_FILTER_SCALE -> 4; ?GL_CONVOLUTION_FILTER_BIAS -> 4; ?GL_CONVOLUTION_FORMAT -> 4; ?GL_CONVOLUTION_WIDTH -> 1; ?GL_CONVOLUTION_HEIGHT -> 1; ?GL_MAX_CONVOLUTION_WIDTH -> 1; ?GL_MAX_CONVOLUTION_HEIGHT -> 1; _ -> 4 end. %% Func: blendColor %% Args: Red, Green, Blue, Alpha %% Returns: ok %% C-API func: void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) blendColor(Red, Green, Blue, Alpha) -> cast(?glBlendColor, <>). %% Func: blendEquation %% Args: Mode %% Returns: ok %% C-API func: void glBlendEquation(GLenum mode) blendEquation(Mode) -> cast(?glBlendEquation, <>). %% Func: drawRangeElements %% Args: Mode, Start, End, Count, Type, <<[Indices]>> %% Returns: ok %% C-API func: void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) drawRangeElements(Mode, Start, End, Count, Type, Indices) -> NewIndices = if is_list(Indices) ; is_tuple(Indices) -> term2bin(Indices, Count, Type); is_binary(Indices) -> Indices; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Indices}) end, cast(?glDrawRangeElements, [<>,NewIndices]). %% Func: colorTable %% Args: Target, Internalformat, Width, Format, Type, <<[Table]>> %% Returns: ok %% C-API func: void glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) colorTable(Target, Internalformat, Width, Format, Type, Table) -> %% Maybe NULL or offset sometimes NewTable = if is_integer(Table) -> Table; true -> sdl:send_bin(Table, ?MODULE, ?LINE), 0 end, cast(?glColorTable, [<>]). %% Func: colorTableParameterfv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat * params) colorTableParameterfv(Target, Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_FLOAT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glColorTableParameterfv, [<>,NewParams]). %% Func: colorTableParameteriv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glColorTableParameteriv(GLenum target, GLenum pname, const GLint * params) colorTableParameteriv(Target, Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_INT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glColorTableParameteriv, [<>,NewParams]). %% Func: copyColorTable %% Args: Target, Internalformat, X, Y, Width %% Returns: ok %% C-API func: void glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) copyColorTable(Target, Internalformat, X, Y, Width) -> cast(?glCopyColorTable, <>). %% Func: getColorTable %% Args: Target, Format, Type, #sdlmem{} = Table %% Returns: ok %% C-API func: void glGetColorTable(GLenum target, GLenum format, GLenum type, GLvoid * table) getColorTable(Target, Format, Type, #sdlmem{bin=Table}) -> sdl:send_bin(Table, ?MODULE, ?LINE), cast(?glGetColorTable, <>). %% Func: getColorTableParameterfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetColorTableParameterfv(GLenum target, GLenum pname, GLfloat * params) getColorTableParameterfv(Target, Pname) -> Bin = call(?glGetColorTableParameterfv, <>), case Bin of <> -> bin2list(4, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getColorTableParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetColorTableParameteriv(GLenum target, GLenum pname, GLint * params) getColorTableParameteriv(Target, Pname) -> Bin = call(?glGetColorTableParameteriv, <>), case Bin of <> -> bin2list(4, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: colorSubTable %% Args: Target, Start, Count, Format, Type, <<[Data]>> %% Returns: ok %% C-API func: void glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) colorSubTable(Target, Start, Count, Format, Type, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glColorSubTable, [<>]). %% Func: copyColorSubTable %% Args: Target, Start, X, Y, Width %% Returns: ok %% C-API func: void glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) copyColorSubTable(Target, Start, X, Y, Width) -> cast(?glCopyColorSubTable, <>). %% Func: convolutionFilter1D %% Args: Target, Internalformat, Width, Format, Type, <<[Image]>> %% Returns: ok %% C-API func: void glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) convolutionFilter1D(Target, Internalformat, Width, Format, Type, Image) -> %% Maybe NULL or offset sometimes NewImage = if is_integer(Image) -> Image; true -> sdl:send_bin(Image, ?MODULE, ?LINE), 0 end, cast(?glConvolutionFilter1D, [<>]). %% Func: convolutionFilter2D %% Args: Target, Internalformat, Width, Height, Format, Type, <<[Image]>> %% Returns: ok %% C-API func: void glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) convolutionFilter2D(Target, Internalformat, Width, Height, Format, Type, Image) -> %% Maybe NULL or offset sometimes NewImage = if is_integer(Image) -> Image; true -> sdl:send_bin(Image, ?MODULE, ?LINE), 0 end, cast(?glConvolutionFilter2D, [<>]). %% Func: convolutionParameterf %% Args: Target, Pname, Params %% Returns: ok %% C-API func: void glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params) convolutionParameterf(Target, Pname, Params) -> cast(?glConvolutionParameterf, <>). %% Func: convolutionParameterfv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat * params) convolutionParameterfv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_FLOAT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glConvolutionParameterfv, [<>,NewParams]). %% Func: convolutionParameteri %% Args: Target, Pname, Params %% Returns: ok %% C-API func: void glConvolutionParameteri(GLenum target, GLenum pname, GLint params) convolutionParameteri(Target, Pname, Params) -> cast(?glConvolutionParameteri, <>). %% Func: convolutionParameteriv %% Args: Target, Pname, <<[Params]>> %% Returns: ok %% C-API func: void glConvolutionParameteriv(GLenum target, GLenum pname, const GLint * params) convolutionParameteriv(Target, Pname, Params) -> NewParams = if is_list(Params) -> ParamsLen = length(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_tuple(Params) -> ParamsLen = size(Params), [<>, term2bin(Params, ParamsLen, ?GL_INT)]; is_binary(Params) -> [<<(size(Params) div 4):32/native>>,Params]; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glConvolutionParameteriv, [<>,NewParams]). %% Func: copyConvolutionFilter1D %% Args: Target, Internalformat, X, Y, Width %% Returns: ok %% C-API func: void glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) copyConvolutionFilter1D(Target, Internalformat, X, Y, Width) -> cast(?glCopyConvolutionFilter1D, <>). %% Func: copyConvolutionFilter2D %% Args: Target, Internalformat, X, Y, Width, Height %% Returns: ok %% C-API func: void glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) copyConvolutionFilter2D(Target, Internalformat, X, Y, Width, Height) -> cast(?glCopyConvolutionFilter2D, <>). %% Func: getConvolutionFilter %% Args: Target, Format, Type, #sdlmem{} = Image %% Returns: ok %% C-API func: void glGetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid * image) getConvolutionFilter(Target, Format, Type, #sdlmem{bin=Image}) -> sdl:send_bin(Image, ?MODULE, ?LINE), cast(?glGetConvolutionFilter, <>). %% Func: getConvolutionParameterfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat * params) getConvolutionParameterfv(Target, Pname) -> Bin = call(?glGetConvolutionParameterfv, <>), ParamsLen = glGetConvolutionParameterfvLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getConvolutionParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetConvolutionParameteriv(GLenum target, GLenum pname, GLint * params) getConvolutionParameteriv(Target, Pname) -> Bin = call(?glGetConvolutionParameteriv, <>), ParamsLen = glGetConvolutionParameterivLen(Pname), ParamsBump = 4 - ParamsLen, case Bin of <> -> bin2list(ParamsLen, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getSeparableFilter %% Args: Target, Format, Type, #sdlmem{} = Row, #sdlmem{} = Column, #sdlmem{} = Span %% Returns: ok %% C-API func: void glGetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) getSeparableFilter(Target, Format, Type, #sdlmem{bin=Row}, #sdlmem{bin=Column}, #sdlmem{bin=Span}) -> sdl:send_bin(Row, ?MODULE, ?LINE), sdl:send_bin(Column, ?MODULE, ?LINE), sdl:send_bin(Span, ?MODULE, ?LINE), cast(?glGetSeparableFilter, <>). %% Func: separableFilter2D %% Args: Target, Internalformat, Width, Height, Format, Type, <<[Row]>>, <<[Column]>> %% Returns: ok %% C-API func: void glSeparableFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) separableFilter2D(Target, Internalformat, Width, Height, Format, Type, Row, Column) -> %% Maybe NULL or offset sometimes NewRow = if is_integer(Row) -> Row; true -> sdl:send_bin(Row, ?MODULE, ?LINE), 0 end, %% Maybe NULL or offset sometimes NewColumn = if is_integer(Column) -> Column; true -> sdl:send_bin(Column, ?MODULE, ?LINE), 0 end, cast(?glSeparableFilter2D, [<>]). %% Func: getHistogram %% Args: Target, Reset, Format, Type, #sdlmem{} = Values %% Returns: ok %% C-API func: void glGetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) getHistogram(Target, Reset, Format, Type, #sdlmem{bin=Values}) -> sdl:send_bin(Values, ?MODULE, ?LINE), cast(?glGetHistogram, <>). %% Func: getHistogramParameterfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetHistogramParameterfv(GLenum target, GLenum pname, GLfloat * params) getHistogramParameterfv(Target, Pname) -> Bin = call(?glGetHistogramParameterfv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getHistogramParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetHistogramParameteriv(GLenum target, GLenum pname, GLint * params) getHistogramParameteriv(Target, Pname) -> Bin = call(?glGetHistogramParameteriv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getMinmax %% Args: Target, Reset, Format, Type, #sdlmem{} = Values %% Returns: ok %% C-API func: void glGetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) getMinmax(Target, Reset, Format, Type, #sdlmem{bin=Values}) -> sdl:send_bin(Values, ?MODULE, ?LINE), cast(?glGetMinmax, <>). %% Func: getMinmaxParameterfv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat * params) getMinmaxParameterfv(Target, Pname) -> Bin = call(?glGetMinmaxParameterfv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getMinmaxParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetMinmaxParameteriv(GLenum target, GLenum pname, GLint * params) getMinmaxParameteriv(Target, Pname) -> Bin = call(?glGetMinmaxParameteriv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: histogram %% Args: Target, Width, Internalformat, Sink %% Returns: ok %% C-API func: void glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) histogram(Target, Width, Internalformat, Sink) -> cast(?glHistogram, <>). %% Func: minmax %% Args: Target, Internalformat, Sink %% Returns: ok %% C-API func: void glMinmax(GLenum target, GLenum internalformat, GLboolean sink) minmax(Target, Internalformat, Sink) -> cast(?glMinmax, <>). %% Func: resetHistogram %% Args: Target %% Returns: ok %% C-API func: void glResetHistogram(GLenum target) resetHistogram(Target) -> cast(?glResetHistogram, <>). %% Func: resetMinmax %% Args: Target %% Returns: ok %% C-API func: void glResetMinmax(GLenum target) resetMinmax(Target) -> cast(?glResetMinmax, <>). %% Func: texImage3D %% Args: Target, Level, Internalformat, Width, Height, Depth, Border, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) texImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexImage3D, [<>]). %% Func: texSubImage3D %% Args: Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, <<[Pixels]>> %% Returns: ok %% C-API func: void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, Type, Pixels) -> %% Maybe NULL or offset sometimes NewPixels = if is_integer(Pixels) -> Pixels; true -> sdl:send_bin(Pixels, ?MODULE, ?LINE), 0 end, cast(?glTexSubImage3D, [<>]). %% Func: copyTexSubImage3D %% Args: Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height %% Returns: ok %% C-API func: void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y, Width, Height) -> cast(?glCopyTexSubImage3D, <>). %% Func: activeTexture %% Args: Texture %% Returns: ok %% C-API func: void glActiveTexture(GLenum texture) activeTexture(Texture) -> cast(?glActiveTexture, <>). %% Func: clientActiveTexture %% Args: Texture %% Returns: ok %% C-API func: void glClientActiveTexture(GLenum texture) clientActiveTexture(Texture) -> cast(?glClientActiveTexture, <>). %% Func: multiTexCoord1d %% Args: Target, S %% Returns: ok %% C-API func: void glMultiTexCoord1d(GLenum target, GLdouble s) multiTexCoord1d(Target, S) -> cast(?glMultiTexCoord1dv, <>). %% Func: multiTexCoord1dv %% Args: Target, {V1} %% Returns: ok %% C-API func: void glMultiTexCoord1dv(GLenum target, const GLdouble * v) multiTexCoord1dv(Target, {V1}) -> cast(?glMultiTexCoord1dv, <>). %% Func: multiTexCoord1f %% Args: Target, S %% Returns: ok %% C-API func: void glMultiTexCoord1f(GLenum target, GLfloat s) multiTexCoord1f(Target, S) -> cast(?glMultiTexCoord1fv, <>). %% Func: multiTexCoord1fv %% Args: Target, {V1} %% Returns: ok %% C-API func: void glMultiTexCoord1fv(GLenum target, const GLfloat * v) multiTexCoord1fv(Target, {V1}) -> cast(?glMultiTexCoord1fv, <>). %% Func: multiTexCoord1i %% Args: Target, S %% Returns: ok %% C-API func: void glMultiTexCoord1i(GLenum target, GLint s) multiTexCoord1i(Target, S) -> cast(?glMultiTexCoord1iv, <>). %% Func: multiTexCoord1iv %% Args: Target, {V1} %% Returns: ok %% C-API func: void glMultiTexCoord1iv(GLenum target, const GLint * v) multiTexCoord1iv(Target, {V1}) -> cast(?glMultiTexCoord1iv, <>). %% Func: multiTexCoord1s %% Args: Target, S %% Returns: ok %% C-API func: void glMultiTexCoord1s(GLenum target, GLshort s) multiTexCoord1s(Target, S) -> cast(?glMultiTexCoord1sv, <>). %% Func: multiTexCoord1sv %% Args: Target, {V1} %% Returns: ok %% C-API func: void glMultiTexCoord1sv(GLenum target, const GLshort * v) multiTexCoord1sv(Target, {V1}) -> cast(?glMultiTexCoord1sv, <>). %% Func: multiTexCoord2d %% Args: Target, S, T %% Returns: ok %% C-API func: void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) multiTexCoord2d(Target, S, T) -> cast(?glMultiTexCoord2dv, <>). %% Func: multiTexCoord2dv %% Args: Target, {V1,V2} %% Returns: ok %% C-API func: void glMultiTexCoord2dv(GLenum target, const GLdouble * v) multiTexCoord2dv(Target, {V1,V2}) -> cast(?glMultiTexCoord2dv, <>). %% Func: multiTexCoord2f %% Args: Target, S, T %% Returns: ok %% C-API func: void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) multiTexCoord2f(Target, S, T) -> cast(?glMultiTexCoord2fv, <>). %% Func: multiTexCoord2fv %% Args: Target, {V1,V2} %% Returns: ok %% C-API func: void glMultiTexCoord2fv(GLenum target, const GLfloat * v) multiTexCoord2fv(Target, {V1,V2}) -> cast(?glMultiTexCoord2fv, <>). %% Func: multiTexCoord2i %% Args: Target, S, T %% Returns: ok %% C-API func: void glMultiTexCoord2i(GLenum target, GLint s, GLint t) multiTexCoord2i(Target, S, T) -> cast(?glMultiTexCoord2iv, <>). %% Func: multiTexCoord2iv %% Args: Target, {V1,V2} %% Returns: ok %% C-API func: void glMultiTexCoord2iv(GLenum target, const GLint * v) multiTexCoord2iv(Target, {V1,V2}) -> cast(?glMultiTexCoord2iv, <>). %% Func: multiTexCoord2s %% Args: Target, S, T %% Returns: ok %% C-API func: void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t) multiTexCoord2s(Target, S, T) -> cast(?glMultiTexCoord2sv, <>). %% Func: multiTexCoord2sv %% Args: Target, {V1,V2} %% Returns: ok %% C-API func: void glMultiTexCoord2sv(GLenum target, const GLshort * v) multiTexCoord2sv(Target, {V1,V2}) -> cast(?glMultiTexCoord2sv, <>). %% Func: multiTexCoord3d %% Args: Target, S, T, R %% Returns: ok %% C-API func: void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) multiTexCoord3d(Target, S, T, R) -> cast(?glMultiTexCoord3dv, <>). %% Func: multiTexCoord3dv %% Args: Target, {V1,V2,V3} %% Returns: ok %% C-API func: void glMultiTexCoord3dv(GLenum target, const GLdouble * v) multiTexCoord3dv(Target, {V1,V2,V3}) -> cast(?glMultiTexCoord3dv, <>). %% Func: multiTexCoord3f %% Args: Target, S, T, R %% Returns: ok %% C-API func: void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) multiTexCoord3f(Target, S, T, R) -> cast(?glMultiTexCoord3fv, <>). %% Func: multiTexCoord3fv %% Args: Target, {V1,V2,V3} %% Returns: ok %% C-API func: void glMultiTexCoord3fv(GLenum target, const GLfloat * v) multiTexCoord3fv(Target, {V1,V2,V3}) -> cast(?glMultiTexCoord3fv, <>). %% Func: multiTexCoord3i %% Args: Target, S, T, R %% Returns: ok %% C-API func: void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r) multiTexCoord3i(Target, S, T, R) -> cast(?glMultiTexCoord3iv, <>). %% Func: multiTexCoord3iv %% Args: Target, {V1,V2,V3} %% Returns: ok %% C-API func: void glMultiTexCoord3iv(GLenum target, const GLint * v) multiTexCoord3iv(Target, {V1,V2,V3}) -> cast(?glMultiTexCoord3iv, <>). %% Func: multiTexCoord3s %% Args: Target, S, T, R %% Returns: ok %% C-API func: void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r) multiTexCoord3s(Target, S, T, R) -> cast(?glMultiTexCoord3sv, <>). %% Func: multiTexCoord3sv %% Args: Target, {V1,V2,V3} %% Returns: ok %% C-API func: void glMultiTexCoord3sv(GLenum target, const GLshort * v) multiTexCoord3sv(Target, {V1,V2,V3}) -> cast(?glMultiTexCoord3sv, <>). %% Func: multiTexCoord4d %% Args: Target, S, T, R, Q %% Returns: ok %% C-API func: void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) multiTexCoord4d(Target, S, T, R, Q) -> cast(?glMultiTexCoord4dv, <>). %% Func: multiTexCoord4dv %% Args: Target, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glMultiTexCoord4dv(GLenum target, const GLdouble * v) multiTexCoord4dv(Target, {V1,V2,V3,V4}) -> cast(?glMultiTexCoord4dv, <>). %% Func: multiTexCoord4f %% Args: Target, S, T, R, Q %% Returns: ok %% C-API func: void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) multiTexCoord4f(Target, S, T, R, Q) -> cast(?glMultiTexCoord4fv, <>). %% Func: multiTexCoord4fv %% Args: Target, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glMultiTexCoord4fv(GLenum target, const GLfloat * v) multiTexCoord4fv(Target, {V1,V2,V3,V4}) -> cast(?glMultiTexCoord4fv, <>). %% Func: multiTexCoord4i %% Args: Target, S, T, R, Q %% Returns: ok %% C-API func: void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q) multiTexCoord4i(Target, S, T, R, Q) -> cast(?glMultiTexCoord4iv, <>). %% Func: multiTexCoord4iv %% Args: Target, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glMultiTexCoord4iv(GLenum target, const GLint * v) multiTexCoord4iv(Target, {V1,V2,V3,V4}) -> cast(?glMultiTexCoord4iv, <>). %% Func: multiTexCoord4s %% Args: Target, S, T, R, Q %% Returns: ok %% C-API func: void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) multiTexCoord4s(Target, S, T, R, Q) -> cast(?glMultiTexCoord4sv, <>). %% Func: multiTexCoord4sv %% Args: Target, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glMultiTexCoord4sv(GLenum target, const GLshort * v) multiTexCoord4sv(Target, {V1,V2,V3,V4}) -> cast(?glMultiTexCoord4sv, <>). %% Func: loadTransposeMatrixf %% Args: <<[M]>> %% Returns: ok %% C-API func: void glLoadTransposeMatrixf( const GLfloat * m) loadTransposeMatrixf(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_FLOAT); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glLoadTransposeMatrixf, [ NewM]). %% Func: loadTransposeMatrixd %% Args: <<[M]>> %% Returns: ok %% C-API func: void glLoadTransposeMatrixd( const GLdouble * m) loadTransposeMatrixd(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_DOUBLE); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glLoadTransposeMatrixd, [ NewM]). %% Func: multTransposeMatrixf %% Args: <<[M]>> %% Returns: ok %% C-API func: void glMultTransposeMatrixf( const GLfloat * m) multTransposeMatrixf(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_FLOAT); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glMultTransposeMatrixf, [ NewM]). %% Func: multTransposeMatrixd %% Args: <<[M]>> %% Returns: ok %% C-API func: void glMultTransposeMatrixd( const GLdouble * m) multTransposeMatrixd(M) -> NewM = if is_list(M) ; is_tuple(M) -> matrix2bin(M, ?GL_DOUBLE); binary(M) -> M; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, M}) end, cast(?glMultTransposeMatrixd, [ NewM]). %% Func: sampleCoverage %% Args: Value, Invert %% Returns: ok %% C-API func: void glSampleCoverage(GLclampf value, GLboolean invert) sampleCoverage(Value, Invert) -> cast(?glSampleCoverage, <>). %% Func: compressedTexImage3D %% Args: Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) compressedTexImage3D(Target, Level, Internalformat, Width, Height, Depth, Border, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexImage3D, [<>]). %% Func: compressedTexImage2D %% Args: Target, Level, Internalformat, Width, Height, Border, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) compressedTexImage2D(Target, Level, Internalformat, Width, Height, Border, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexImage2D, [<>]). %% Func: compressedTexImage1D %% Args: Target, Level, Internalformat, Width, Border, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) compressedTexImage1D(Target, Level, Internalformat, Width, Border, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexImage1D, [<>]). %% Func: compressedTexSubImage3D %% Args: Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width, Height, Depth, Format, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexSubImage3D, [<>]). %% Func: compressedTexSubImage2D %% Args: Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height, Format, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexSubImage2D, [<>]). %% Func: compressedTexSubImage1D %% Args: Target, Level, Xoffset, Width, Format, ImageSize, <<[Data]>> %% Returns: ok %% C-API func: void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) compressedTexSubImage1D(Target, Level, Xoffset, Width, Format, ImageSize, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glCompressedTexSubImage1D, [<>]). %% Func: getCompressedTexImage %% Args: Target, Level, #sdlmem{} = Img %% Returns: ok %% C-API func: void glGetCompressedTexImage(GLenum target, GLint level, GLvoid * img) getCompressedTexImage(Target, Level, #sdlmem{bin=Img}) -> sdl:send_bin(Img, ?MODULE, ?LINE), cast(?glGetCompressedTexImage, <>). %% Func: blendFuncSeparate %% Args: SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha %% Returns: ok %% C-API func: void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha, DfactorAlpha) -> cast(?glBlendFuncSeparate, <>). %% Func: fogCoordf %% Args: Coord %% Returns: ok %% C-API func: void glFogCoordf(GLfloat coord) fogCoordf(Coord) -> cast(?glFogCoordf, <>). %% Func: fogCoordfv %% Args: <<[Coord]>> %% Returns: ok %% C-API func: void glFogCoordfv( const GLfloat * coord) fogCoordfv(Coord) -> NewCoord = if is_list(Coord) ; is_tuple(Coord) -> term2bin(Coord, 1, ?GL_FLOAT); binary(Coord) -> Coord; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Coord}) end, cast(?glFogCoordfv, [ NewCoord]). %% Func: fogCoordd %% Args: Coord %% Returns: ok %% C-API func: void glFogCoordd(GLdouble coord) fogCoordd(Coord) -> cast(?glFogCoordd, <>). %% Func: fogCoorddv %% Args: <<[Coord]>> %% Returns: ok %% C-API func: void glFogCoorddv( const GLdouble * coord) fogCoorddv(Coord) -> NewCoord = if is_list(Coord) ; is_tuple(Coord) -> term2bin(Coord, 1, ?GL_DOUBLE); binary(Coord) -> Coord; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Coord}) end, cast(?glFogCoorddv, [ NewCoord]). %% Func: fogCoordPointer %% Args: Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glFogCoordPointer(GLenum type, GLsizei stride, const GLvoid * pointer) fogCoordPointer(Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glFogCoordPointer, [<>]). %% Func: multiDrawArrays %% Args: Mode, <<[First]>>, <<[Count]>>, Primcount %% Returns: ok %% C-API func: void glMultiDrawArrays(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) multiDrawArrays(Mode, First, Count, Primcount) -> NewFirst = if is_list(First) ; is_tuple(First) -> term2bin(First, Primcount, ?GL_INT); is_binary(First) -> First; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, First}) end, NewCount = if is_list(Count) ; is_tuple(Count) -> term2bin(Count, Primcount, ?GL_UNSIGNED_INT); is_binary(Count) -> Count; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Count}) end, cast(?glMultiDrawArrays, [<>,NewFirst, NewCount]). %% Func: pointParameterf %% Args: Pname, Param %% Returns: ok %% C-API func: void glPointParameterf(GLenum pname, GLfloat param) pointParameterf(Pname, Param) -> cast(?glPointParameterf, <>). %% Func: pointParameterfv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glPointParameterfv(GLenum pname, const GLfloat * params) pointParameterfv(Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 3, ?GL_FLOAT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glPointParameterfv, [<>,NewParams]). %% Func: pointParameteri %% Args: Pname, Param %% Returns: ok %% C-API func: void glPointParameteri(GLenum pname, GLint param) pointParameteri(Pname, Param) -> cast(?glPointParameteri, <>). %% Func: pointParameteriv %% Args: Pname, <<[Params]>> %% Returns: ok %% C-API func: void glPointParameteriv(GLenum pname, const GLint * params) pointParameteriv(Pname, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 3, ?GL_INT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glPointParameteriv, [<>,NewParams]). %% Func: secondaryColor3b %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) secondaryColor3b(Red, Green, Blue) -> cast(?glSecondaryColor3bv, <>). %% Func: secondaryColor3bv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3bv( const GLbyte * v) secondaryColor3bv({V1,V2,V3}) -> cast(?glSecondaryColor3bv, <>). %% Func: secondaryColor3d %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue) secondaryColor3d(Red, Green, Blue) -> cast(?glSecondaryColor3dv, <>). %% Func: secondaryColor3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3dv( const GLdouble * v) secondaryColor3dv({V1,V2,V3}) -> cast(?glSecondaryColor3dv, <>). %% Func: secondaryColor3f %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue) secondaryColor3f(Red, Green, Blue) -> cast(?glSecondaryColor3fv, <>). %% Func: secondaryColor3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3fv( const GLfloat * v) secondaryColor3fv({V1,V2,V3}) -> cast(?glSecondaryColor3fv, <>). %% Func: secondaryColor3i %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3i(GLint red, GLint green, GLint blue) secondaryColor3i(Red, Green, Blue) -> cast(?glSecondaryColor3iv, <>). %% Func: secondaryColor3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3iv( const GLint * v) secondaryColor3iv({V1,V2,V3}) -> cast(?glSecondaryColor3iv, <>). %% Func: secondaryColor3s %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3s(GLshort red, GLshort green, GLshort blue) secondaryColor3s(Red, Green, Blue) -> cast(?glSecondaryColor3sv, <>). %% Func: secondaryColor3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3sv( const GLshort * v) secondaryColor3sv({V1,V2,V3}) -> cast(?glSecondaryColor3sv, <>). %% Func: secondaryColor3ub %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue) secondaryColor3ub(Red, Green, Blue) -> cast(?glSecondaryColor3ubv, <>). %% Func: secondaryColor3ubv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3ubv( const GLubyte * v) secondaryColor3ubv({V1,V2,V3}) -> cast(?glSecondaryColor3ubv, <>). %% Func: secondaryColor3ui %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue) secondaryColor3ui(Red, Green, Blue) -> cast(?glSecondaryColor3uiv, <>). %% Func: secondaryColor3uiv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3uiv( const GLuint * v) secondaryColor3uiv({V1,V2,V3}) -> cast(?glSecondaryColor3uiv, <>). %% Func: secondaryColor3us %% Args: Red, Green, Blue %% Returns: ok %% C-API func: void glSecondaryColor3us(GLushort red, GLushort green, GLushort blue) secondaryColor3us(Red, Green, Blue) -> cast(?glSecondaryColor3usv, <>). %% Func: secondaryColor3usv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glSecondaryColor3usv( const GLushort * v) secondaryColor3usv({V1,V2,V3}) -> cast(?glSecondaryColor3usv, <>). %% Func: secondaryColorPointer %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) secondaryColorPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glSecondaryColorPointer, [<>]). %% Func: windowPos2d %% Args: X, Y %% Returns: ok %% C-API func: void glWindowPos2d(GLdouble x, GLdouble y) windowPos2d(X, Y) -> cast(?glWindowPos2dv, <>). %% Func: windowPos2dv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glWindowPos2dv( const GLdouble * v) windowPos2dv({V1,V2}) -> cast(?glWindowPos2dv, <>). %% Func: windowPos2f %% Args: X, Y %% Returns: ok %% C-API func: void glWindowPos2f(GLfloat x, GLfloat y) windowPos2f(X, Y) -> cast(?glWindowPos2fv, <>). %% Func: windowPos2fv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glWindowPos2fv( const GLfloat * v) windowPos2fv({V1,V2}) -> cast(?glWindowPos2fv, <>). %% Func: windowPos2i %% Args: X, Y %% Returns: ok %% C-API func: void glWindowPos2i(GLint x, GLint y) windowPos2i(X, Y) -> cast(?glWindowPos2iv, <>). %% Func: windowPos2iv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glWindowPos2iv( const GLint * v) windowPos2iv({V1,V2}) -> cast(?glWindowPos2iv, <>). %% Func: windowPos2s %% Args: X, Y %% Returns: ok %% C-API func: void glWindowPos2s(GLshort x, GLshort y) windowPos2s(X, Y) -> cast(?glWindowPos2sv, <>). %% Func: windowPos2sv %% Args: {V1,V2} %% Returns: ok %% C-API func: void glWindowPos2sv( const GLshort * v) windowPos2sv({V1,V2}) -> cast(?glWindowPos2sv, <>). %% Func: windowPos3d %% Args: X, Y, Z %% Returns: ok %% C-API func: void glWindowPos3d(GLdouble x, GLdouble y, GLdouble z) windowPos3d(X, Y, Z) -> cast(?glWindowPos3dv, <>). %% Func: windowPos3dv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glWindowPos3dv( const GLdouble * v) windowPos3dv({V1,V2,V3}) -> cast(?glWindowPos3dv, <>). %% Func: windowPos3f %% Args: X, Y, Z %% Returns: ok %% C-API func: void glWindowPos3f(GLfloat x, GLfloat y, GLfloat z) windowPos3f(X, Y, Z) -> cast(?glWindowPos3fv, <>). %% Func: windowPos3fv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glWindowPos3fv( const GLfloat * v) windowPos3fv({V1,V2,V3}) -> cast(?glWindowPos3fv, <>). %% Func: windowPos3i %% Args: X, Y, Z %% Returns: ok %% C-API func: void glWindowPos3i(GLint x, GLint y, GLint z) windowPos3i(X, Y, Z) -> cast(?glWindowPos3iv, <>). %% Func: windowPos3iv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glWindowPos3iv( const GLint * v) windowPos3iv({V1,V2,V3}) -> cast(?glWindowPos3iv, <>). %% Func: windowPos3s %% Args: X, Y, Z %% Returns: ok %% C-API func: void glWindowPos3s(GLshort x, GLshort y, GLshort z) windowPos3s(X, Y, Z) -> cast(?glWindowPos3sv, <>). %% Func: windowPos3sv %% Args: {V1,V2,V3} %% Returns: ok %% C-API func: void glWindowPos3sv( const GLshort * v) windowPos3sv({V1,V2,V3}) -> cast(?glWindowPos3sv, <>). %% Func: genQueries %% Args: N %% Returns: [Ids] %% C-API func: void glGenQueries(GLsizei n, GLuint * ids) genQueries(N) -> Bin = call(?glGenQueries, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Ids); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: deleteQueries %% Args: N, <<[Ids]>> %% Returns: ok %% C-API func: void glDeleteQueries(GLsizei n, const GLuint * ids) deleteQueries(N, Ids) -> NewIds = if is_list(Ids) ; is_tuple(Ids) -> term2bin(Ids, N, ?GL_UNSIGNED_INT); is_binary(Ids) -> Ids; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Ids}) end, cast(?glDeleteQueries, [<>,NewIds]). %% Func: isQuery %% Args: Id %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsQuery(GLuint id) isQuery(Id) -> Bin = call(?glIsQuery, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: beginQuery %% Args: Target, Id %% Returns: ok %% C-API func: void glBeginQuery(GLenum target, GLuint id) beginQuery(Target, Id) -> cast(?glBeginQuery, <>). %% Func: endQuery %% Args: Target %% Returns: ok %% C-API func: void glEndQuery(GLenum target) endQuery(Target) -> cast(?glEndQuery, <>). %% Func: getQueryiv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetQueryiv(GLenum target, GLenum pname, GLint * params) getQueryiv(Target, Pname) -> Bin = call(?glGetQueryiv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getQueryObjectiv %% Args: Id, Pname %% Returns: [Params] %% C-API func: void glGetQueryObjectiv(GLuint id, GLenum pname, GLint * params) getQueryObjectiv(Id, Pname) -> Bin = call(?glGetQueryObjectiv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getQueryObjectuiv %% Args: Id, Pname %% Returns: [Params] %% C-API func: void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint * params) getQueryObjectuiv(Id, Pname) -> Bin = call(?glGetQueryObjectuiv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: bindBuffer %% Args: Target, Buffer %% Returns: ok %% C-API func: void glBindBuffer(GLenum target, GLuint buffer) bindBuffer(Target, Buffer) -> cast(?glBindBuffer, <>). %% Func: deleteBuffers %% Args: N, <<[Buffers]>> %% Returns: ok %% C-API func: void glDeleteBuffers(GLsizei n, const GLuint * buffers) deleteBuffers(N, Buffers) -> NewBuffers = if is_list(Buffers) ; is_tuple(Buffers) -> term2bin(Buffers, N, ?GL_UNSIGNED_INT); is_binary(Buffers) -> Buffers; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Buffers}) end, cast(?glDeleteBuffers, [<>,NewBuffers]). %% Func: genBuffers %% Args: N %% Returns: [Buffers] %% C-API func: void glGenBuffers(GLsizei n, GLuint * buffers) genBuffers(N) -> Bin = call(?glGenBuffers, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Buffers); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isBuffer %% Args: Buffer %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsBuffer(GLuint buffer) isBuffer(Buffer) -> Bin = call(?glIsBuffer, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: bufferData %% Args: Target, Size, <<[Data]>>, Usage %% Returns: ok %% C-API func: void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) bufferData(Target, Size, Data, Usage) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glBufferData, [<>]). %% Func: bufferSubData %% Args: Target, Offset, Size, <<[Data]>> %% Returns: ok %% C-API func: void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) bufferSubData(Target, Offset, Size, Data) -> %% Maybe NULL or offset sometimes NewData = if is_integer(Data) -> Data; true -> sdl:send_bin(Data, ?MODULE, ?LINE), 0 end, cast(?glBufferSubData, [<>]). %% Func: getBufferSubData %% Args: Target, Offset, Size, #sdlmem{} = Data %% Returns: ok %% C-API func: void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data) getBufferSubData(Target, Offset, Size, #sdlmem{bin=Data}) -> sdl:send_bin(Data, ?MODULE, ?LINE), cast(?glGetBufferSubData, <>). %% Func: unmapBuffer %% Args: Target %% Returns: ?GL_BYTE %% C-API func: GLboolean glUnmapBuffer(GLenum target) unmapBuffer(Target) -> Bin = call(?glUnmapBuffer, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getBufferParameteriv %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) getBufferParameteriv(Target, Pname) -> Bin = call(?glGetBufferParameteriv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getBufferPointerv %% Args: Target, Pname %% Returns: Params=#sdlmem{} %% C-API func: void glGetBufferPointerv(GLenum target, GLenum pname, GLvoid* *params) getBufferPointerv(Target, Pname) -> Bin = call(?glGetBufferPointerv, <>), case Bin of <> -> erlang:fault({nyi, ?MODULE,?LINE}); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: blendEquationSeparate %% Args: ModeRGB, ModeAlpha %% Returns: ok %% C-API func: void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) blendEquationSeparate(ModeRGB, ModeAlpha) -> cast(?glBlendEquationSeparate, <>). %% Func: drawBuffers %% Args: N, <<[Bufs]>> %% Returns: ok %% C-API func: void glDrawBuffers(GLsizei n, const GLenum * bufs) drawBuffers(N, Bufs) -> NewBufs = if is_list(Bufs) ; is_tuple(Bufs) -> term2bin(Bufs, N, ?GL_INT); is_binary(Bufs) -> Bufs; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Bufs}) end, cast(?glDrawBuffers, [<>,NewBufs]). %% Func: stencilOpSeparate %% Args: Face, Sfail, Dpfail, Dppass %% Returns: ok %% C-API func: void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> cast(?glStencilOpSeparate, <>). %% Func: stencilFuncSeparate %% Args: Frontfunc, Backfunc, Ref, Mask %% Returns: ok %% C-API func: void glStencilFuncSeparate(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) stencilFuncSeparate(Frontfunc, Backfunc, Ref, Mask) -> cast(?glStencilFuncSeparate, <>). %% Func: stencilMaskSeparate %% Args: Face, Mask %% Returns: ok %% C-API func: void glStencilMaskSeparate(GLenum face, GLuint mask) stencilMaskSeparate(Face, Mask) -> cast(?glStencilMaskSeparate, <>). %% Func: attachShader %% Args: Program, Shader %% Returns: ok %% C-API func: void glAttachShader(GLuint program, GLuint shader) attachShader(Program, Shader) -> cast(?glAttachShader, <>). %% Func: bindAttribLocation %% Args: Program, Index, <<[Name]>> %% Returns: ok %% C-API func: void glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) bindAttribLocation(Program, Index, Name) -> sdl:send_bin(list_to_binary([Name,0]), ?MODULE, ?LINE), cast(?glBindAttribLocation, <>). %% Func: compileShader %% Args: Shader %% Returns: ok %% C-API func: void glCompileShader(GLuint shader) compileShader(Shader) -> cast(?glCompileShader, <>). %% Func: createProgram %% Args: %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLuint glCreateProgram() createProgram() -> Bin = call(?glCreateProgram, []), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: createShader %% Args: Type %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLuint glCreateShader(GLenum type) createShader(Type) -> Bin = call(?glCreateShader, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: deleteProgram %% Args: Program %% Returns: ok %% C-API func: void glDeleteProgram(GLuint program) deleteProgram(Program) -> cast(?glDeleteProgram, <>). %% Func: deleteShader %% Args: Shader %% Returns: ok %% C-API func: void glDeleteShader(GLuint shader) deleteShader(Shader) -> cast(?glDeleteShader, <>). %% Func: detachShader %% Args: Program, Shader %% Returns: ok %% C-API func: void glDetachShader(GLuint program, GLuint shader) detachShader(Program, Shader) -> cast(?glDetachShader, <>). %% Func: disableVertexAttribArray %% Args: Index %% Returns: ok %% C-API func: void glDisableVertexAttribArray(GLuint index) disableVertexAttribArray(Index) -> cast(?glDisableVertexAttribArray, <>). %% Func: enableVertexAttribArray %% Args: Index %% Returns: ok %% C-API func: void glEnableVertexAttribArray(GLuint index) enableVertexAttribArray(Index) -> cast(?glEnableVertexAttribArray, <>). %% Func: getActiveAttrib %% Args: Program, Index, BufSize %% Returns: {[Length], [Size], [Type], [Name]} %% C-API func: void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) getActiveAttrib(Program, Index, BufSize) -> Bin = call(?glGetActiveAttrib, <>), case Bin of <> -> {Length, Size, Type, bin2list(Length, ?GL_UNSIGNED_BYTE, Name)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getActiveUniform %% Args: Program, Index, BufSize %% Returns: {[Length], [Size], [Type], [Name]} %% C-API func: void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) getActiveUniform(Program, Index, BufSize) -> Bin = call(?glGetActiveUniform, <>), case Bin of <> -> {Length, Size, Type, bin2list(Length, ?GL_UNSIGNED_BYTE, Name)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getAttachedShaders %% Args: Program, MaxCount %% Returns: {[Count], [Obj]} %% C-API func: void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj) getAttachedShaders(Program, MaxCount) -> Bin = call(?glGetAttachedShaders, <>), case Bin of <> -> {Count, bin2list(Count, ?GL_UNSIGNED_INT, Obj)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getAttribLocation %% Args: Program, <<[Name]>> %% Returns: ?GL_INT %% C-API func: GLint glGetAttribLocation(GLuint program, const GLchar * name) getAttribLocation(Program, Name) -> sdl:send_bin(list_to_binary([Name,0]), ?MODULE, ?LINE), Bin = call(?glGetAttribLocation, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramiv %% Args: Program, Pname %% Returns: [Params] %% C-API func: void glGetProgramiv(GLuint program, GLenum pname, GLint * params) getProgramiv(Program, Pname) -> Bin = call(?glGetProgramiv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramInfoLog %% Args: Program, BufSize %% Returns: {[Length], [InfoLog]} %% C-API func: void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) getProgramInfoLog(Program, BufSize) -> Bin = call(?glGetProgramInfoLog, <>), case Bin of <> -> {Length, bin2list(Length, ?GL_UNSIGNED_BYTE, InfoLog)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getShaderiv %% Args: Shader, Pname %% Returns: [Params] %% C-API func: void glGetShaderiv(GLuint shader, GLenum pname, GLint * params) getShaderiv(Shader, Pname) -> Bin = call(?glGetShaderiv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getShaderInfoLog %% Args: Shader, BufSize %% Returns: {[Length], [InfoLog]} %% C-API func: void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) getShaderInfoLog(Shader, BufSize) -> Bin = call(?glGetShaderInfoLog, <>), case Bin of <> -> {Length, bin2list(Length, ?GL_UNSIGNED_BYTE, InfoLog)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getShaderSource %% Args: Shader, BufSize %% Returns: {[Length], [Source]} %% C-API func: void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) getShaderSource(Shader, BufSize) -> Bin = call(?glGetShaderSource, <>), case Bin of <> -> {Length, bin2list(Length, ?GL_UNSIGNED_BYTE, Source)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getUniformLocation %% Args: Program, <<[Name]>> %% Returns: ?GL_INT %% C-API func: GLint glGetUniformLocation(GLuint program, const GLchar * name) getUniformLocation(Program, Name) -> sdl:send_bin(list_to_binary([Name,0]), ?MODULE, ?LINE), Bin = call(?glGetUniformLocation, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getUniformfv %% Args: Program, Location, #sdlmem{} = Params %% Returns: ok %% C-API func: void glGetUniformfv(GLuint program, GLint location, GLfloat * params) getUniformfv(Program, Location, #sdlmem{bin=Params}) -> sdl:send_bin(Params, ?MODULE, ?LINE), cast(?glGetUniformfv, <>). %% Func: getUniformiv %% Args: Program, Location, #sdlmem{} = Params %% Returns: ok %% C-API func: void glGetUniformiv(GLuint program, GLint location, GLint * params) getUniformiv(Program, Location, #sdlmem{bin=Params}) -> sdl:send_bin(Params, ?MODULE, ?LINE), cast(?glGetUniformiv, <>). %% Func: getVertexAttribdv %% Args: Index, Pname %% Returns: [Params] %% C-API func: void glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble * params) getVertexAttribdv(Index, Pname) -> Bin = call(?glGetVertexAttribdv, <>), case Bin of <> -> bin2list(4, ?GL_DOUBLE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getVertexAttribfv %% Args: Index, Pname %% Returns: [Params] %% C-API func: void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) getVertexAttribfv(Index, Pname) -> Bin = call(?glGetVertexAttribfv, <>), case Bin of <> -> bin2list(4, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getVertexAttribiv %% Args: Index, Pname %% Returns: [Params] %% C-API func: void glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) getVertexAttribiv(Index, Pname) -> Bin = call(?glGetVertexAttribiv, <>), case Bin of <> -> bin2list(4, ?GL_INT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getVertexAttribPointerv %% Args: Index, Pname %% Returns: Pointer=#sdlmem{} %% C-API func: void glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* *pointer) getVertexAttribPointerv(Index, Pname) -> Bin = call(?glGetVertexAttribPointerv, <>), case Bin of <> -> erlang:fault({nyi, ?MODULE,?LINE}); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isProgram %% Args: Program %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsProgram(GLuint program) isProgram(Program) -> Bin = call(?glIsProgram, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isShader %% Args: Shader %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsShader(GLuint shader) isShader(Shader) -> Bin = call(?glIsShader, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: linkProgram %% Args: Program %% Returns: ok %% C-API func: void glLinkProgram(GLuint program) linkProgram(Program) -> cast(?glLinkProgram, <>). %% Func: shaderSource %% Args: Shader, Count, <<[Length]>> %% Returns: ok %% C-API func: void glShaderSource(GLuint shader, GLsizei count, const GLchar* *string, const GLint * length) shaderSource(Shader, Count, String, Length) -> lists:foreach(fun(Values) -> sdl:send_bin(list_to_binary([Values,0]), ?MODULE, ?LINE) end, String), NewLength = if is_list(Length) ; is_tuple(Length) -> term2bin(Length, Count, ?GL_INT); is_binary(Length) -> Length; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Length}) end, cast(?glShaderSource, [<>,NewLength]). %% Func: useProgram %% Args: Program %% Returns: ok %% C-API func: void glUseProgram(GLuint program) useProgram(Program) -> cast(?glUseProgram, <>). %% Func: uniform1f %% Args: Location, V0 %% Returns: ok %% C-API func: void glUniform1f(GLint location, GLfloat v0) uniform1f(Location, V0) -> cast(?glUniform1f, <>). %% Func: uniform2f %% Args: Location, V0, V1 %% Returns: ok %% C-API func: void glUniform2f(GLint location, GLfloat v0, GLfloat v1) uniform2f(Location, V0, V1) -> cast(?glUniform2f, <>). %% Func: uniform3f %% Args: Location, V0, V1, V2 %% Returns: ok %% C-API func: void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) uniform3f(Location, V0, V1, V2) -> cast(?glUniform3f, <>). %% Func: uniform4f %% Args: Location, V0, V1, V2, V3 %% Returns: ok %% C-API func: void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) uniform4f(Location, V0, V1, V2, V3) -> cast(?glUniform4f, <>). %% Func: uniform1i %% Args: Location, V0 %% Returns: ok %% C-API func: void glUniform1i(GLint location, GLint v0) uniform1i(Location, V0) -> cast(?glUniform1i, <>). %% Func: uniform2i %% Args: Location, V0, V1 %% Returns: ok %% C-API func: void glUniform2i(GLint location, GLint v0, GLint v1) uniform2i(Location, V0, V1) -> cast(?glUniform2i, <>). %% Func: uniform3i %% Args: Location, V0, V1, V2 %% Returns: ok %% C-API func: void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) uniform3i(Location, V0, V1, V2) -> cast(?glUniform3i, <>). %% Func: uniform4i %% Args: Location, V0, V1, V2, V3 %% Returns: ok %% C-API func: void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) uniform4i(Location, V0, V1, V2, V3) -> cast(?glUniform4i, <>). %% Func: uniform1fv %% Args: Location, Count, [Value1] %% Returns: ok %% C-API func: void glUniform1fv(GLint location, GLsizei count, const GLfloat * value) uniform1fv(Location, Count, Value) -> sdl:send_bin(sdl_util:term2bin(Value,Count,?GL_FLOAT), ?MODULE, ?LINE), cast(?glUniform1fv, <>). %% Func: uniform2fv %% Args: Location, Count, [{Value1,Value2}] %% Returns: ok %% C-API func: void glUniform2fv(GLint location, GLsizei count, const GLfloat * value) uniform2fv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(2,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniform2fv, <>). %% Func: uniform3fv %% Args: Location, Count, [{Value1,Value2,Value3}] %% Returns: ok %% C-API func: void glUniform3fv(GLint location, GLsizei count, const GLfloat * value) uniform3fv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(3,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniform3fv, <>). %% Func: uniform4fv %% Args: Location, Count, [{Value1,Value2,Value3,Value4}] %% Returns: ok %% C-API func: void glUniform4fv(GLint location, GLsizei count, const GLfloat * value) uniform4fv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(4,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniform4fv, <>). %% Func: uniform1iv %% Args: Location, Count, [Value1] %% Returns: ok %% C-API func: void glUniform1iv(GLint location, GLsizei count, const GLint * value) uniform1iv(Location, Count, Value) -> sdl:send_bin(sdl_util:term2bin(Value,Count,?GL_INT), ?MODULE, ?LINE), cast(?glUniform1iv, <>). %% Func: uniform2iv %% Args: Location, Count, [{Value1,Value2}] %% Returns: ok %% C-API func: void glUniform2iv(GLint location, GLsizei count, const GLint * value) uniform2iv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(2,?GL_INT,Value), ?MODULE, ?LINE), cast(?glUniform2iv, <>). %% Func: uniform3iv %% Args: Location, Count, [{Value1,Value2,Value3}] %% Returns: ok %% C-API func: void glUniform3iv(GLint location, GLsizei count, const GLint * value) uniform3iv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(3,?GL_INT,Value), ?MODULE, ?LINE), cast(?glUniform3iv, <>). %% Func: uniform4iv %% Args: Location, Count, [{Value1,Value2,Value3,Value4}] %% Returns: ok %% C-API func: void glUniform4iv(GLint location, GLsizei count, const GLint * value) uniform4iv(Location, Count, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(4,?GL_INT,Value), ?MODULE, ?LINE), cast(?glUniform4iv, <>). %% Func: uniformMatrix2fv %% Args: Location, Count, Transpose, [{Value1,Value2,Value3,Value4}] %% Returns: ok %% C-API func: void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) uniformMatrix2fv(Location, Count, Transpose, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(4,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniformMatrix2fv, <>). %% Func: uniformMatrix3fv %% Args: Location, Count, Transpose, [{Value1,Value2,Value3,Value4,Value5,Value6,Value7,Value8,Value9}] %% Returns: ok %% C-API func: void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) uniformMatrix3fv(Location, Count, Transpose, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(9,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniformMatrix3fv, <>). %% Func: uniformMatrix4fv %% Args: Location, Count, Transpose, [{Value1,Value2,Value3,Value4,Value5,Value6,Value7,Value8,Value9,Value10,Value11,Value12,Value13,Value14,Value15,Value16}] %% Returns: ok %% C-API func: void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) uniformMatrix4fv(Location, Count, Transpose, Value) -> sdl:send_bin(sdl_util:tuplelist2bin(16,?GL_FLOAT,Value), ?MODULE, ?LINE), cast(?glUniformMatrix4fv, <>). %% Func: validateProgram %% Args: Program %% Returns: ok %% C-API func: void glValidateProgram(GLuint program) validateProgram(Program) -> cast(?glValidateProgram, <>). %% Func: vertexAttrib1d %% Args: Index, X %% Returns: ok %% C-API func: void glVertexAttrib1d(GLuint index, GLdouble x) vertexAttrib1d(Index, X) -> cast(?glVertexAttrib1dv, <>). %% Func: vertexAttrib1dv %% Args: Index, {V1} %% Returns: ok %% C-API func: void glVertexAttrib1dv(GLuint index, const GLdouble * v) vertexAttrib1dv(Index, {V1}) -> cast(?glVertexAttrib1dv, <>). %% Func: vertexAttrib1f %% Args: Index, X %% Returns: ok %% C-API func: void glVertexAttrib1f(GLuint index, GLfloat x) vertexAttrib1f(Index, X) -> cast(?glVertexAttrib1fv, <>). %% Func: vertexAttrib1fv %% Args: Index, {V1} %% Returns: ok %% C-API func: void glVertexAttrib1fv(GLuint index, const GLfloat * v) vertexAttrib1fv(Index, {V1}) -> cast(?glVertexAttrib1fv, <>). %% Func: vertexAttrib1s %% Args: Index, X %% Returns: ok %% C-API func: void glVertexAttrib1s(GLuint index, GLshort x) vertexAttrib1s(Index, X) -> cast(?glVertexAttrib1sv, <>). %% Func: vertexAttrib1sv %% Args: Index, {V1} %% Returns: ok %% C-API func: void glVertexAttrib1sv(GLuint index, const GLshort * v) vertexAttrib1sv(Index, {V1}) -> cast(?glVertexAttrib1sv, <>). %% Func: vertexAttrib2d %% Args: Index, X, Y %% Returns: ok %% C-API func: void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) vertexAttrib2d(Index, X, Y) -> cast(?glVertexAttrib2dv, <>). %% Func: vertexAttrib2dv %% Args: Index, {V1,V2} %% Returns: ok %% C-API func: void glVertexAttrib2dv(GLuint index, const GLdouble * v) vertexAttrib2dv(Index, {V1,V2}) -> cast(?glVertexAttrib2dv, <>). %% Func: vertexAttrib2f %% Args: Index, X, Y %% Returns: ok %% C-API func: void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) vertexAttrib2f(Index, X, Y) -> cast(?glVertexAttrib2fv, <>). %% Func: vertexAttrib2fv %% Args: Index, {V1,V2} %% Returns: ok %% C-API func: void glVertexAttrib2fv(GLuint index, const GLfloat * v) vertexAttrib2fv(Index, {V1,V2}) -> cast(?glVertexAttrib2fv, <>). %% Func: vertexAttrib2s %% Args: Index, X, Y %% Returns: ok %% C-API func: void glVertexAttrib2s(GLuint index, GLshort x, GLshort y) vertexAttrib2s(Index, X, Y) -> cast(?glVertexAttrib2sv, <>). %% Func: vertexAttrib2sv %% Args: Index, {V1,V2} %% Returns: ok %% C-API func: void glVertexAttrib2sv(GLuint index, const GLshort * v) vertexAttrib2sv(Index, {V1,V2}) -> cast(?glVertexAttrib2sv, <>). %% Func: vertexAttrib3d %% Args: Index, X, Y, Z %% Returns: ok %% C-API func: void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) vertexAttrib3d(Index, X, Y, Z) -> cast(?glVertexAttrib3dv, <>). %% Func: vertexAttrib3dv %% Args: Index, {V1,V2,V3} %% Returns: ok %% C-API func: void glVertexAttrib3dv(GLuint index, const GLdouble * v) vertexAttrib3dv(Index, {V1,V2,V3}) -> cast(?glVertexAttrib3dv, <>). %% Func: vertexAttrib3f %% Args: Index, X, Y, Z %% Returns: ok %% C-API func: void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) vertexAttrib3f(Index, X, Y, Z) -> cast(?glVertexAttrib3fv, <>). %% Func: vertexAttrib3fv %% Args: Index, {V1,V2,V3} %% Returns: ok %% C-API func: void glVertexAttrib3fv(GLuint index, const GLfloat * v) vertexAttrib3fv(Index, {V1,V2,V3}) -> cast(?glVertexAttrib3fv, <>). %% Func: vertexAttrib3s %% Args: Index, X, Y, Z %% Returns: ok %% C-API func: void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) vertexAttrib3s(Index, X, Y, Z) -> cast(?glVertexAttrib3sv, <>). %% Func: vertexAttrib3sv %% Args: Index, {V1,V2,V3} %% Returns: ok %% C-API func: void glVertexAttrib3sv(GLuint index, const GLshort * v) vertexAttrib3sv(Index, {V1,V2,V3}) -> cast(?glVertexAttrib3sv, <>). %% Func: vertexAttrib4Nbv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Nbv(GLuint index, const GLbyte * v) vertexAttrib4Nbv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_BYTE); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Nbv, [<>,NewV]). %% Func: vertexAttrib4Niv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Niv(GLuint index, const GLint * v) vertexAttrib4Niv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_INT); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Niv, [<>,NewV]). %% Func: vertexAttrib4Nsv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Nsv(GLuint index, const GLshort * v) vertexAttrib4Nsv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_SHORT); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Nsv, [<>,NewV]). %% Func: vertexAttrib4Nub %% Args: Index, X, Y, Z, W %% Returns: ok %% C-API func: void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) vertexAttrib4Nub(Index, X, Y, Z, W) -> cast(?glVertexAttrib4Nub, <>). %% Func: vertexAttrib4Nubv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Nubv(GLuint index, const GLubyte * v) vertexAttrib4Nubv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_UNSIGNED_BYTE); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Nubv, [<>,NewV]). %% Func: vertexAttrib4Nuiv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Nuiv(GLuint index, const GLuint * v) vertexAttrib4Nuiv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_UNSIGNED_INT); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Nuiv, [<>,NewV]). %% Func: vertexAttrib4Nusv %% Args: Index, <<[V]>> %% Returns: ok %% C-API func: void glVertexAttrib4Nusv(GLuint index, const GLushort * v) vertexAttrib4Nusv(Index, V) -> NewV = if is_list(V) ; is_tuple(V) -> term2bin(V, 4, ?GL_UNSIGNED_SHORT); binary(V) -> V; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, V}) end, cast(?glVertexAttrib4Nusv, [<>,NewV]). %% Func: vertexAttrib4bv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4bv(GLuint index, const GLbyte * v) vertexAttrib4bv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4bv, <>). %% Func: vertexAttrib4d %% Args: Index, X, Y, Z, W %% Returns: ok %% C-API func: void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) vertexAttrib4d(Index, X, Y, Z, W) -> cast(?glVertexAttrib4dv, <>). %% Func: vertexAttrib4dv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4dv(GLuint index, const GLdouble * v) vertexAttrib4dv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4dv, <>). %% Func: vertexAttrib4f %% Args: Index, X, Y, Z, W %% Returns: ok %% C-API func: void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) vertexAttrib4f(Index, X, Y, Z, W) -> cast(?glVertexAttrib4fv, <>). %% Func: vertexAttrib4fv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4fv(GLuint index, const GLfloat * v) vertexAttrib4fv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4fv, <>). %% Func: vertexAttrib4iv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4iv(GLuint index, const GLint * v) vertexAttrib4iv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4iv, <>). %% Func: vertexAttrib4s %% Args: Index, X, Y, Z, W %% Returns: ok %% C-API func: void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) vertexAttrib4s(Index, X, Y, Z, W) -> cast(?glVertexAttrib4sv, <>). %% Func: vertexAttrib4sv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4sv(GLuint index, const GLshort * v) vertexAttrib4sv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4sv, <>). %% Func: vertexAttrib4ubv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4ubv(GLuint index, const GLubyte * v) vertexAttrib4ubv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4ubv, <>). %% Func: vertexAttrib4uiv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4uiv(GLuint index, const GLuint * v) vertexAttrib4uiv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4uiv, <>). %% Func: vertexAttrib4usv %% Args: Index, {V1,V2,V3,V4} %% Returns: ok %% C-API func: void glVertexAttrib4usv(GLuint index, const GLushort * v) vertexAttrib4usv(Index, {V1,V2,V3,V4}) -> cast(?glVertexAttrib4usv, <>). %% Func: vertexAttribPointer %% Args: Index, Size, Type, Normalized, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glVertexAttribPointer, [<>]). %% Func: weightbvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightbvARB(GLint size, const GLbyte * weights) weightbvARB(Size, Weights) -> weightbv(Size, Weights). weightbv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_BYTE); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightbv, [<>,NewWeights]). %% Func: weightsvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightsvARB(GLint size, const GLshort * weights) weightsvARB(Size, Weights) -> weightsv(Size, Weights). weightsv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_SHORT); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightsv, [<>,NewWeights]). %% Func: weightivARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightivARB(GLint size, const GLint * weights) weightivARB(Size, Weights) -> weightiv(Size, Weights). weightiv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_INT); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightiv, [<>,NewWeights]). %% Func: weightfvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightfvARB(GLint size, const GLfloat * weights) weightfvARB(Size, Weights) -> weightfv(Size, Weights). weightfv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_FLOAT); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightfv, [<>,NewWeights]). %% Func: weightdvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightdvARB(GLint size, const GLdouble * weights) weightdvARB(Size, Weights) -> weightdv(Size, Weights). weightdv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_DOUBLE); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightdv, [<>,NewWeights]). %% Func: weightubvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightubvARB(GLint size, const GLubyte * weights) weightubvARB(Size, Weights) -> weightubv(Size, Weights). weightubv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_UNSIGNED_BYTE); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightubv, [<>,NewWeights]). %% Func: weightusvARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightusvARB(GLint size, const GLushort * weights) weightusvARB(Size, Weights) -> weightusv(Size, Weights). weightusv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_UNSIGNED_SHORT); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightusv, [<>,NewWeights]). %% Func: weightuivARB %% Args: Size, <<[Weights]>> %% Returns: ok %% C-API func: void glWeightuivARB(GLint size, const GLuint * weights) weightuivARB(Size, Weights) -> weightuiv(Size, Weights). weightuiv(Size, Weights) -> NewWeights = if is_list(Weights) ; is_tuple(Weights) -> term2bin(Weights, Size, ?GL_UNSIGNED_INT); is_binary(Weights) -> Weights; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Weights}) end, cast(?glWeightuiv, [<>,NewWeights]). %% Func: weightPointerARB %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glWeightPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) weightPointerARB(Size, Type, Stride, Pointer) -> weightPointer(Size, Type, Stride, Pointer). weightPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glWeightPointer, [<>]). %% Func: vertexBlendARB %% Args: Count %% Returns: ok %% C-API func: void glVertexBlendARB(GLint count) vertexBlendARB(Count) -> vertexBlend(Count). vertexBlend(Count) -> cast(?glVertexBlend, <>). %% Func: currentPaletteMatrixARB %% Args: Index %% Returns: ok %% C-API func: void glCurrentPaletteMatrixARB(GLint index) currentPaletteMatrixARB(Index) -> currentPaletteMatrix(Index). currentPaletteMatrix(Index) -> cast(?glCurrentPaletteMatrix, <>). %% Func: matrixIndexubvARB %% Args: Size, <<[Indices]>> %% Returns: ok %% C-API func: void glMatrixIndexubvARB(GLint size, const GLubyte * indices) matrixIndexubvARB(Size, Indices) -> matrixIndexubv(Size, Indices). matrixIndexubv(Size, Indices) -> NewIndices = if is_list(Indices) ; is_tuple(Indices) -> term2bin(Indices, Size, ?GL_UNSIGNED_BYTE); is_binary(Indices) -> Indices; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Indices}) end, cast(?glMatrixIndexubv, [<>,NewIndices]). %% Func: matrixIndexusvARB %% Args: Size, <<[Indices]>> %% Returns: ok %% C-API func: void glMatrixIndexusvARB(GLint size, const GLushort * indices) matrixIndexusvARB(Size, Indices) -> matrixIndexusv(Size, Indices). matrixIndexusv(Size, Indices) -> NewIndices = if is_list(Indices) ; is_tuple(Indices) -> term2bin(Indices, Size, ?GL_UNSIGNED_SHORT); is_binary(Indices) -> Indices; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Indices}) end, cast(?glMatrixIndexusv, [<>,NewIndices]). %% Func: matrixIndexuivARB %% Args: Size, <<[Indices]>> %% Returns: ok %% C-API func: void glMatrixIndexuivARB(GLint size, const GLuint * indices) matrixIndexuivARB(Size, Indices) -> matrixIndexuiv(Size, Indices). matrixIndexuiv(Size, Indices) -> NewIndices = if is_list(Indices) ; is_tuple(Indices) -> term2bin(Indices, Size, ?GL_UNSIGNED_INT); is_binary(Indices) -> Indices; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Indices}) end, cast(?glMatrixIndexuiv, [<>,NewIndices]). %% Func: matrixIndexPointerARB %% Args: Size, Type, Stride, <<[Pointer]>> %% Returns: ok %% C-API func: void glMatrixIndexPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) matrixIndexPointerARB(Size, Type, Stride, Pointer) -> matrixIndexPointer(Size, Type, Stride, Pointer). matrixIndexPointer(Size, Type, Stride, Pointer) -> %% Maybe NULL or offset sometimes NewPointer = if is_integer(Pointer) -> Pointer; true -> sdl:send_bin(Pointer, ?MODULE, ?LINE), 0 end, cast(?glMatrixIndexPointer, [<>]). %% Func: programStringARB %% Args: Target, Format, Len, <<[String]>> %% Returns: ok %% C-API func: void glProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid * string) programStringARB(Target, Format, Len, String) -> programString(Target, Format, Len, String). programString(Target, Format, Len, String) -> %% Maybe NULL or offset sometimes NewString = if is_integer(String) -> String; true -> sdl:send_bin(String, ?MODULE, ?LINE), 0 end, cast(?glProgramString, [<>]). %% Func: bindProgramARB %% Args: Target, Program %% Returns: ok %% C-API func: void glBindProgramARB(GLenum target, GLuint program) bindProgramARB(Target, Program) -> bindProgram(Target, Program). bindProgram(Target, Program) -> cast(?glBindProgram, <>). %% Func: deleteProgramsARB %% Args: N, <<[Programs]>> %% Returns: ok %% C-API func: void glDeleteProgramsARB(GLsizei n, const GLuint * programs) deleteProgramsARB(N, Programs) -> deletePrograms(N, Programs). deletePrograms(N, Programs) -> NewPrograms = if is_list(Programs) ; is_tuple(Programs) -> term2bin(Programs, N, ?GL_UNSIGNED_INT); is_binary(Programs) -> Programs; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Programs}) end, cast(?glDeletePrograms, [<>,NewPrograms]). %% Func: genProgramsARB %% Args: N %% Returns: [Programs] %% C-API func: void glGenProgramsARB(GLsizei n, GLuint * programs) genProgramsARB(N) -> genPrograms(N). genPrograms(N) -> Bin = call(?glGenPrograms, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Programs); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: programEnvParameter4dARB %% Args: Target, Index, X, Y, Z, W %% Returns: ok %% C-API func: void glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> programEnvParameter4d(Target, Index, X, Y, Z, W). programEnvParameter4d(Target, Index, X, Y, Z, W) -> cast(?glProgramEnvParameter4dv, <>). %% Func: programEnvParameter4dvARB %% Args: Target, Index, <<[Params]>> %% Returns: ok %% C-API func: void glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) programEnvParameter4dvARB(Target, Index, Params) -> programEnvParameter4dv(Target, Index, Params). programEnvParameter4dv(Target, Index, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_DOUBLE); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glProgramEnvParameter4dv, [<>,NewParams]). %% Func: programEnvParameter4fARB %% Args: Target, Index, X, Y, Z, W %% Returns: ok %% C-API func: void glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> programEnvParameter4f(Target, Index, X, Y, Z, W). programEnvParameter4f(Target, Index, X, Y, Z, W) -> cast(?glProgramEnvParameter4fv, <>). %% Func: programEnvParameter4fvARB %% Args: Target, Index, <<[Params]>> %% Returns: ok %% C-API func: void glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) programEnvParameter4fvARB(Target, Index, Params) -> programEnvParameter4fv(Target, Index, Params). programEnvParameter4fv(Target, Index, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_FLOAT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glProgramEnvParameter4fv, [<>,NewParams]). %% Func: programLocalParameter4dARB %% Args: Target, Index, X, Y, Z, W %% Returns: ok %% C-API func: void glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> programLocalParameter4d(Target, Index, X, Y, Z, W). programLocalParameter4d(Target, Index, X, Y, Z, W) -> cast(?glProgramLocalParameter4dv, <>). %% Func: programLocalParameter4dvARB %% Args: Target, Index, <<[Params]>> %% Returns: ok %% C-API func: void glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) programLocalParameter4dvARB(Target, Index, Params) -> programLocalParameter4dv(Target, Index, Params). programLocalParameter4dv(Target, Index, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_DOUBLE); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glProgramLocalParameter4dv, [<>,NewParams]). %% Func: programLocalParameter4fARB %% Args: Target, Index, X, Y, Z, W %% Returns: ok %% C-API func: void glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> programLocalParameter4f(Target, Index, X, Y, Z, W). programLocalParameter4f(Target, Index, X, Y, Z, W) -> cast(?glProgramLocalParameter4fv, <>). %% Func: programLocalParameter4fvARB %% Args: Target, Index, <<[Params]>> %% Returns: ok %% C-API func: void glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) programLocalParameter4fvARB(Target, Index, Params) -> programLocalParameter4fv(Target, Index, Params). programLocalParameter4fv(Target, Index, Params) -> NewParams = if is_list(Params) ; is_tuple(Params) -> term2bin(Params, 4, ?GL_FLOAT); binary(Params) -> Params; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Params}) end, cast(?glProgramLocalParameter4fv, [<>,NewParams]). %% Func: getProgramEnvParameterdvARB %% Args: Target, Index %% Returns: [Params] %% C-API func: void glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble * params) getProgramEnvParameterdvARB(Target, Index) -> getProgramEnvParameterdv(Target, Index). getProgramEnvParameterdv(Target, Index) -> Bin = call(?glGetProgramEnvParameterdv, <>), case Bin of <> -> bin2list(4, ?GL_DOUBLE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramEnvParameterfvARB %% Args: Target, Index %% Returns: [Params] %% C-API func: void glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat * params) getProgramEnvParameterfvARB(Target, Index) -> getProgramEnvParameterfv(Target, Index). getProgramEnvParameterfv(Target, Index) -> Bin = call(?glGetProgramEnvParameterfv, <>), case Bin of <> -> bin2list(4, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramLocalParameterdvARB %% Args: Target, Index %% Returns: [Params] %% C-API func: void glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble * params) getProgramLocalParameterdvARB(Target, Index) -> getProgramLocalParameterdv(Target, Index). getProgramLocalParameterdv(Target, Index) -> Bin = call(?glGetProgramLocalParameterdv, <>), case Bin of <> -> bin2list(4, ?GL_DOUBLE, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramLocalParameterfvARB %% Args: Target, Index %% Returns: [Params] %% C-API func: void glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat * params) getProgramLocalParameterfvARB(Target, Index) -> getProgramLocalParameterfv(Target, Index). getProgramLocalParameterfv(Target, Index) -> Bin = call(?glGetProgramLocalParameterfv, <>), case Bin of <> -> bin2list(4, ?GL_FLOAT, Params); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getProgramStringARB %% Args: Target, Pname, #sdlmem{} = String %% Returns: ok %% C-API func: void glGetProgramStringARB(GLenum target, GLenum pname, GLvoid * string) getProgramStringARB(Target, Pname, #sdlmem{bin=String}) -> getProgramString(Target, Pname, #sdlmem{bin=String}). getProgramString(Target, Pname, #sdlmem{bin=String}) -> sdl:send_bin(String, ?MODULE, ?LINE), cast(?glGetProgramString, <>). %% Func: deleteObjectARB %% Args: Obj %% Returns: ok %% C-API func: void glDeleteObjectARB(GLhandleARB obj) deleteObjectARB(Obj) -> try deleteProgram(Obj) catch error:_ -> glDeleteObjectARB_fallback(Obj) end. glDeleteObjectARB_fallback(Obj) -> cast(?glDeleteObjectARB, <>). %% Func: getHandleARB %% Args: Pname %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLhandleARB glGetHandleARB(GLenum pname) getHandleARB(Pname) -> getHandle(Pname). getHandle(Pname) -> Bin = call(?glGetHandle, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: detachObjectARB %% Args: ContainerObj, AttachedObj %% Returns: ok %% C-API func: void glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj) detachObjectARB(ContainerObj, AttachedObj) -> try detachShader(ContainerObj, AttachedObj) catch error:_ -> glDetachObjectARB_fallback(ContainerObj, AttachedObj) end. glDetachObjectARB_fallback(ContainerObj, AttachedObj) -> cast(?glDetachObjectARB, <>). %% Func: createShaderObjectARB %% Args: ShaderType %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLhandleARB glCreateShaderObjectARB(GLenum shaderType) createShaderObjectARB(ShaderType) -> try createShader(ShaderType) catch error:_ -> glCreateShaderObjectARB_fallback(ShaderType) end. glCreateShaderObjectARB_fallback(ShaderType) -> Bin = call(?glCreateShaderObjectARB, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: createProgramObjectARB %% Args: %% Returns: ?GL_UNSIGNED_INT %% C-API func: GLhandleARB glCreateProgramObjectARB() createProgramObjectARB() -> try createProgram() catch error:_ -> glCreateProgramObjectARB_fallback() end. glCreateProgramObjectARB_fallback() -> Bin = call(?glCreateProgramObjectARB, []), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: attachObjectARB %% Args: ContainerObj, Obj %% Returns: ok %% C-API func: void glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj) attachObjectARB(ContainerObj, Obj) -> try attachShader(ContainerObj, Obj) catch error:_ -> glAttachObjectARB_fallback(ContainerObj, Obj) end. glAttachObjectARB_fallback(ContainerObj, Obj) -> cast(?glAttachObjectARB, <>). %% Func: useProgramObjectARB %% Args: ProgramObj %% Returns: ok %% C-API func: void glUseProgramObjectARB(GLhandleARB programObj) useProgramObjectARB(ProgramObj) -> try useProgram(ProgramObj) catch error:_ -> glUseProgramObjectARB_fallback(ProgramObj) end. glUseProgramObjectARB_fallback(ProgramObj) -> cast(?glUseProgramObjectARB, <>). %% Func: getObjectParameterfvARB %% Args: Obj, Pname %% Returns: [Params] %% C-API func: void glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat * params) getObjectParameterfvARB(Obj, Pname) -> getObjectParameterfv(Obj, Pname). getObjectParameterfv(Obj, Pname) -> Bin = call(?glGetObjectParameterfv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getObjectParameterivARB %% Args: Obj, Pname %% Returns: [Params] %% C-API func: void glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint * params) getObjectParameterivARB(Obj, Pname) -> getObjectParameteriv(Obj, Pname). getObjectParameteriv(Obj, Pname) -> Bin = call(?glGetObjectParameteriv, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getInfoLogARB %% Args: Obj, MaxLength %% Returns: {[Length], [InfoLog]} %% C-API func: void glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) getInfoLogARB(Obj, MaxLength) -> getInfoLog(Obj, MaxLength). getInfoLog(Obj, MaxLength) -> Bin = call(?glGetInfoLog, <>), case Bin of <> -> {Length, bin2list(Length, ?GL_UNSIGNED_BYTE, InfoLog)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: getAttachedObjectsARB %% Args: ContainerObj, MaxCount %% Returns: {[Count], [Obj]} %% C-API func: void glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj) getAttachedObjectsARB(ContainerObj, MaxCount) -> try getAttachedShaders(ContainerObj, MaxCount) catch error:_ -> glGetAttachedObjectsARB_fallback(ContainerObj, MaxCount) end. glGetAttachedObjectsARB_fallback(ContainerObj, MaxCount) -> Bin = call(?glGetAttachedObjectsARB, <>), case Bin of <> -> {Count, bin2list(Count, ?GL_UNSIGNED_INT, Obj)}; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: stencilOpSeparateATI %% Args: Face, Sfail, Dpfail, Dppass %% Returns: ok %% C-API func: void glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) stencilOpSeparateATI(Face, Sfail, Dpfail, Dppass) -> cast(?glStencilOpSeparateATI, <>). %% Func: stencilFuncSeparateATI %% Args: Frontfunc, Backfunc, Ref, Mask %% Returns: ok %% C-API func: void glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) stencilFuncSeparateATI(Frontfunc, Backfunc, Ref, Mask) -> cast(?glStencilFuncSeparateATI, <>). %% Func: isRenderbufferEXT %% Args: Renderbuffer %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsRenderbufferEXT(GLuint renderbuffer) isRenderbufferEXT(Renderbuffer) -> Bin = call(?glIsRenderbufferEXT, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: bindRenderbufferEXT %% Args: Target, Renderbuffer %% Returns: ok %% C-API func: void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) bindRenderbufferEXT(Target, Renderbuffer) -> cast(?glBindRenderbufferEXT, <>). %% Func: deleteRenderbuffersEXT %% Args: N, <<[Renderbuffers]>> %% Returns: ok %% C-API func: void glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers) deleteRenderbuffersEXT(N, Renderbuffers) -> NewRenderbuffers = if is_list(Renderbuffers) ; is_tuple(Renderbuffers) -> term2bin(Renderbuffers, N, ?GL_UNSIGNED_INT); is_binary(Renderbuffers) -> Renderbuffers; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Renderbuffers}) end, cast(?glDeleteRenderbuffersEXT, [<>,NewRenderbuffers]). %% Func: genRenderbuffersEXT %% Args: N %% Returns: [Renderbuffers] %% C-API func: void glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers) genRenderbuffersEXT(N) -> Bin = call(?glGenRenderbuffersEXT, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Renderbuffers); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: renderbufferStorageEXT %% Args: Target, Internalformat, Width, Height %% Returns: ok %% C-API func: void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) renderbufferStorageEXT(Target, Internalformat, Width, Height) -> cast(?glRenderbufferStorageEXT, <>). %% Func: getRenderbufferParameterivEXT %% Args: Target, Pname %% Returns: [Params] %% C-API func: void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params) getRenderbufferParameterivEXT(Target, Pname) -> Bin = call(?glGetRenderbufferParameterivEXT, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: isFramebufferEXT %% Args: Framebuffer %% Returns: ?GL_BYTE %% C-API func: GLboolean glIsFramebufferEXT(GLuint framebuffer) isFramebufferEXT(Framebuffer) -> Bin = call(?glIsFramebufferEXT, <>), case Bin of <> -> Ret /= ?GL_FALSE; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: bindFramebufferEXT %% Args: Target, Framebuffer %% Returns: ok %% C-API func: void glBindFramebufferEXT(GLenum target, GLuint framebuffer) bindFramebufferEXT(Target, Framebuffer) -> cast(?glBindFramebufferEXT, <>). %% Func: deleteFramebuffersEXT %% Args: N, <<[Framebuffers]>> %% Returns: ok %% C-API func: void glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers) deleteFramebuffersEXT(N, Framebuffers) -> NewFramebuffers = if is_list(Framebuffers) ; is_tuple(Framebuffers) -> term2bin(Framebuffers, N, ?GL_UNSIGNED_INT); is_binary(Framebuffers) -> Framebuffers; true -> erlang:fault({?MODULE, ?LINE, unsupported_type, Framebuffers}) end, cast(?glDeleteFramebuffersEXT, [<>,NewFramebuffers]). %% Func: genFramebuffersEXT %% Args: N %% Returns: [Framebuffers] %% C-API func: void glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers) genFramebuffersEXT(N) -> Bin = call(?glGenFramebuffersEXT, <>), case Bin of <> -> bin2list(N, ?GL_UNSIGNED_INT, Framebuffers); Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: checkFramebufferStatusEXT %% Args: Target %% Returns: ?GL_INT %% C-API func: GLenum glCheckFramebufferStatusEXT(GLenum target) checkFramebufferStatusEXT(Target) -> Bin = call(?glCheckFramebufferStatusEXT, <>), case Bin of <> -> Ret; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: framebufferTexture1DEXT %% Args: Target, Attachment, Textarget, Texture, Level %% Returns: ok %% C-API func: void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) framebufferTexture1DEXT(Target, Attachment, Textarget, Texture, Level) -> cast(?glFramebufferTexture1DEXT, <>). %% Func: framebufferTexture2DEXT %% Args: Target, Attachment, Textarget, Texture, Level %% Returns: ok %% C-API func: void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) framebufferTexture2DEXT(Target, Attachment, Textarget, Texture, Level) -> cast(?glFramebufferTexture2DEXT, <>). %% Func: framebufferTexture3DEXT %% Args: Target, Attachment, Textarget, Texture, Level, Zoffset %% Returns: ok %% C-API func: void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) framebufferTexture3DEXT(Target, Attachment, Textarget, Texture, Level, Zoffset) -> cast(?glFramebufferTexture3DEXT, <>). %% Func: framebufferRenderbufferEXT %% Args: Target, Attachment, Renderbuffertarget, Renderbuffer %% Returns: ok %% C-API func: void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) framebufferRenderbufferEXT(Target, Attachment, Renderbuffertarget, Renderbuffer) -> cast(?glFramebufferRenderbufferEXT, <>). %% Func: getFramebufferAttachmentParameterivEXT %% Args: Target, Attachment, Pname %% Returns: [Params] %% C-API func: void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params) getFramebufferAttachmentParameterivEXT(Target, Attachment, Pname) -> Bin = call(?glGetFramebufferAttachmentParameterivEXT, <>), case Bin of <> -> Params; Else -> erlang:fault({?MODULE, ?LINE, badtype, Else}) end. %% Func: generateMipmapEXT %% Args: Target %% Returns: ok %% C-API func: void glGenerateMipmapEXT(GLenum target) generateMipmapEXT(Target) -> cast(?glGenerateMipmapEXT, <>).