/* File: cwasm_webgl_js_imports.h Author: Taylor Robbins Date: 09\01\2025 */ #ifndef _CWASM_WEBGL_JS_IMPORTS_H #define _CWASM_WEBGL_JS_IMPORTS_H typedef int GlId; // Really this is just an index into a javascript array that holds the real reference to the WebGL object typedef int GlEnum; MAYBE_EXTERN_C int jsGlGetError(); MAYBE_EXTERN_C bool jsGlGetParameterBool(GlEnum parameter); MAYBE_EXTERN_C GlEnum jsGlGetParameterEnum(GlEnum parameter); MAYBE_EXTERN_C int jsGlGetParameterInt(GlEnum parameter); MAYBE_EXTERN_C float jsGlGetParameterFloat(GlEnum parameter); MAYBE_EXTERN_C char* jsGlGetParameterString(Arena* arenaPntr, GlEnum parameter); MAYBE_EXTERN_C void jsGlEnable(GlEnum capability); MAYBE_EXTERN_C void jsGlDisable(GlEnum capability); MAYBE_EXTERN_C void jsGlBlendFunc(GlEnum srcFactor, GlEnum dstFactor); MAYBE_EXTERN_C void jsGlBlendFuncSeparate(GlEnum srcRGB, GlEnum dstRGB, GlEnum srcAlpha, GlEnum dstAlpha); MAYBE_EXTERN_C void jsGlBlendEquation(GlEnum equation); MAYBE_EXTERN_C void jsGlDepthFunc(GlEnum depthFunc); MAYBE_EXTERN_C void jsGlFrontFace(GlEnum cullMode); MAYBE_EXTERN_C void jsGlDeleteBuffer(GlId bufferId); MAYBE_EXTERN_C GlId jsGlCreateBuffer(); MAYBE_EXTERN_C void jsGlBindBuffer(GlEnum bufferType, GlId bufferId); MAYBE_EXTERN_C void jsGlBufferData(GlEnum bufferType, u32 dataLength, const void* dataPntr, GlEnum usageHint); MAYBE_EXTERN_C void jsGlDeleteTexture(GlId textureId); MAYBE_EXTERN_C GlId jsGlCreateTexture(); MAYBE_EXTERN_C void jsGlActiveTexture(GlEnum textureIndex); MAYBE_EXTERN_C void jsGlBindTexture(GlEnum target, GlId textureId); MAYBE_EXTERN_C void jsGlPixelStorei(GlEnum parameter, int value); MAYBE_EXTERN_C void jsGlTexImage2D(GlEnum target, GlEnum level, GlEnum internalFormat, int width, int height, int border, GlEnum format, GlEnum type, int dataLength, const void* dataPntr); MAYBE_EXTERN_C void jsGlTexParameteri(GlEnum target, GlEnum parameter, int value); MAYBE_EXTERN_C void jsGlGenerateMipmap(GlEnum target); MAYBE_EXTERN_C void jsGlDeleteVertexArray(GlId vaoId); MAYBE_EXTERN_C GlId jsGlCreateVertexArray(); MAYBE_EXTERN_C void jsGlBindVertexArray(GlId vaoId); MAYBE_EXTERN_C void jsGlEnableVertexAttribArray(GlEnum location); MAYBE_EXTERN_C void jsGlVertexAttribPointer(GlEnum attribLocation, int componentCount, GlEnum componentType, bool normalized, int stride, int offset); MAYBE_EXTERN_C void jsGlDeleteShader(GlId shaderId); MAYBE_EXTERN_C GlId jsGlCreateShader(GlEnum shaderType); MAYBE_EXTERN_C void jsGlShaderSource(GlId shaderId, int sourceLength, const char* sourcePntr); MAYBE_EXTERN_C void jsGlCompileShader(GlId shaderId); MAYBE_EXTERN_C bool jsGlGetShaderParameterBool(GlId shaderId, GlEnum parameter); MAYBE_EXTERN_C int jsGlGetShaderParameterInt(GlId shaderId, GlEnum parameter); MAYBE_EXTERN_C char* jsGlGetShaderInfoLog(Arena* arenaPntr, GlId shaderId); MAYBE_EXTERN_C void jsGlDeleteProgram(GlId programId); MAYBE_EXTERN_C GlId jsGlCreateProgram(); MAYBE_EXTERN_C void jsGlAttachShader(GlId programId, GlId shaderId); MAYBE_EXTERN_C void jsGlLinkProgram(GlId programId); MAYBE_EXTERN_C char* jsGlGetProgramInfoLog(Arena* arenaPntr, GlId programId); MAYBE_EXTERN_C void jsGlUseProgram(GlId programId); MAYBE_EXTERN_C bool jsGlGetProgramParameterBool(GlId programId, GlEnum parameter); MAYBE_EXTERN_C int jsGlGetProgramParameterInt(GlId programId, GlEnum parameter); MAYBE_EXTERN_C void jsGlClearColor(r32 rValue, r32 gValue, r32 bValue, r32 aValue); MAYBE_EXTERN_C void jsGlClearDepth(r32 depth); MAYBE_EXTERN_C void jsGlClearStencil(r32 stencilValue); MAYBE_EXTERN_C void jsGlClear(int bufferBits); MAYBE_EXTERN_C void jsGlDrawArrays(GlEnum geometryType, int startIndex, int count); MAYBE_EXTERN_C GlId jsGlGetUniformLocation(GlId programId, int nameLength, const char* namePntr); MAYBE_EXTERN_C void jsGlUniform1f(GlId locationId, r32 value); MAYBE_EXTERN_C void jsGlUniform2f(GlId locationId, r32 value0, r32 value1); MAYBE_EXTERN_C void jsGlUniform3f(GlId locationId, r32 value0, r32 value1, r32 value2); MAYBE_EXTERN_C void jsGlUniform4f(GlId locationId, r32 value0, r32 value1, r32 value2, r32 value3); MAYBE_EXTERN_C void jsGlUniform1fv(GlId locationId, int valuesCount, const r32* valuesPntr); MAYBE_EXTERN_C void jsGlUniform2fv(GlId locationId, int valuesCount, const v2* valuesPntr); MAYBE_EXTERN_C void jsGlUniform3fv(GlId locationId, int valuesCount, const v3* valuesPntr); MAYBE_EXTERN_C void jsGlUniform4fv(GlId locationId, int valuesCount, const v4* valuesPntr); MAYBE_EXTERN_C void jsGlUniform1i(GlId locationId, int value); MAYBE_EXTERN_C void jsGlUniform2i(GlId locationId, int value0, int value1); MAYBE_EXTERN_C void jsGlUniform3i(GlId locationId, int value0, int value1, int value2); MAYBE_EXTERN_C void jsGlUniform4i(GlId locationId, int value0, int value1, int value2, int value3); MAYBE_EXTERN_C void jsGlUniform1iv(GlId locationId, int valuesCount, const int* valuesPntr); MAYBE_EXTERN_C void jsGlUniform2iv(GlId locationId, int valuesCount, const v2i* valuesPntr); MAYBE_EXTERN_C void jsGlUniform3iv(GlId locationId, int valuesCount, const v3i* valuesPntr); MAYBE_EXTERN_C void jsGlUniform4iv(GlId locationId, int valuesCount, const v4i* valuesPntr); MAYBE_EXTERN_C void jsGlUniformMatrix2fv(GlId locationId, const mat2* valuesPntr); MAYBE_EXTERN_C void jsGlUniformMatrix3fv(GlId locationId, const mat3* valuesPntr); MAYBE_EXTERN_C void jsGlUniformMatrix4fv(GlId locationId, const mat4* valuesPntr); #endif // _CWASM_WEBGL_JS_IMPORTS_H