package opengles
+use package core { cptr }
+
#library "onyx_opengles"
GLGetProcAddress :: #distinct i64 // (name: cstr) -> ^void
glSampleCoverage :: (value: GLfloat, invert: GLboolean) -> void ---
glScissor :: (x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> void ---
glShaderBinary :: (count: GLsizei, shaders: ^GLuint, binaryformat: GLenum, binary: rawptr, length: GLsizei) -> void ---
- glShaderSource :: (shader: GLuint, count: GLsizei, string: ^^GLchar, length: ^GLint) -> void ---
+ glShaderSource :: (shader: GLuint, count: GLsizei, string: ^cptr(GLchar), length: ^GLint) -> void ---
glStencilFunc :: (func: GLenum, ref: GLint, mask: GLuint) -> void ---
glStencilFuncSeparate :: (face: GLenum, func: GLenum, ref: GLint, mask: GLuint) -> void ---
glStencilMask :: (mask: GLuint) -> void ---
glClearBufferfi :: (buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> void ---
glGetStringi :: (name: GLenum, index: GLuint) -> ^GLubyte ---
glCopyBufferSubData :: (readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> void ---
- glGetUniformIndices :: (program: GLuint, uniformCount: GLsizei, uniformNames: ^^GLchar, uniformIndices: ^GLuint) -> void ---
+ glGetUniformIndices :: (program: GLuint, uniformCount: GLsizei, uniformNames: ^cptr(GLchar), uniformIndices: ^GLuint) -> void ---
glGetActiveUniformsiv :: (program: GLuint, uniformCount: GLsizei, uniformIndices: ^GLuint, pname: GLenum, params: ^GLint) -> void ---
glGetUniformBlockIndex :: (program: GLuint, uniformBlockName: ^GLchar) -> GLuint ---
glGetActiveUniformBlockiv :: (program: GLuint, uniformBlockIndex: GLuint, pname: GLenum, params: ^GLint) -> void ---
ONYX_GL_INT_4_PTR(glGetInternalformativ, GLint)
ONYX_DEF(glShaderSource, (INT, INT, PTR, PTR), ()) {
- GLsizei count = params->data[1].of.i32;
- int* base_ptr = (int *) ONYX_PTR(params->data[2].of.i32);
- char** strs = alloca(count * sizeof(char *));
- for (int i=0; i<count; i++) {
- strs[i] = (char *) ONYX_PTR(*(base_ptr + i));
- }
+ GLsizei count = params->data[1].of.i32;
+ GLchar** sources = ONYX_PTR(params->data[2].of.i32);
+ GLint* lengths = ONYX_PTR(params->data[3].of.i32);
- glad_glShaderSource(params->data[0].of.i32, count, strs, (GLint *) ONYX_PTR(params->data[3].of.i32));
+ glad_glShaderSource(params->data[0].of.i32, count, sources, lengths);
return NULL;
}
ONYX_DEF(glGetUniformIndices, (INT, INT, PTR, PTR), ()) {
- GLsizei count = params->data[1].of.i32;
- int* base_ptr = (int *) ONYX_PTR(params->data[2].of.i32);
- char** strs = alloca(count * sizeof(char *));
- for (int i=0; i<count; i++) {
- strs[i] = (char *) ONYX_PTR(*(base_ptr + i));
- }
+ GLsizei count = params->data[1].of.i32;
+ GLchar** names = ONYX_PTR(params->data[2].of.i32);
+ GLint* lengths = ONYX_PTR(params->data[3].of.i32);
- glad_glGetUniformIndices(params->data[0].of.i32, count, (const char *const*) strs, (int *) ONYX_PTR(params->data[3].of.i32));
+ glad_glGetUniformIndices(params->data[0].of.i32, count, (const char *const*) names, lengths);
return NULL;
}