*params = 0;\r
break;\r
case GL_NUM_EXTENSIONS: // integer\r
- UNIMPLEMENTED();\r
- *params = 0;\r
+ GLuint numExtensions;\r
+ getExtensions(0, &numExtensions);\r
+ *params = numExtensions;\r
break;\r
case GL_NUM_PROGRAM_BINARY_FORMATS: // integer, at least 0\r
UNIMPLEMENTED();\r
return device;\r
}\r
\r
+const GLubyte* Context::getExtensions(GLuint index, GLuint* numExt)\r
+{\r
+ // Keep list sorted in following order:\r
+ // OES extensions\r
+ // EXT extensions\r
+ // Vendor extensions\r
+ static const GLubyte* extensions[] = {\r
+ (const GLubyte*)"GL_OES_compressed_ETC1_RGB8_texture",\r
+ (const GLubyte*)"GL_OES_depth_texture",\r
+ (const GLubyte*)"GL_OES_depth_texture_cube_map",\r
+ (const GLubyte*)"GL_OES_EGL_image",\r
+ (const GLubyte*)"GL_OES_EGL_image_external",\r
+ (const GLubyte*)"GL_OES_element_index_uint",\r
+ (const GLubyte*)"GL_OES_packed_depth_stencil",\r
+ (const GLubyte*)"GL_OES_rgb8_rgba8",\r
+ (const GLubyte*)"GL_OES_standard_derivatives",\r
+ (const GLubyte*)"GL_OES_texture_float",\r
+ (const GLubyte*)"GL_OES_texture_float_linear",\r
+ (const GLubyte*)"GL_OES_texture_half_float",\r
+ (const GLubyte*)"GL_OES_texture_half_float_linear",\r
+ (const GLubyte*)"GL_OES_texture_npot",\r
+ (const GLubyte*)"GL_OES_texture_3D",\r
+ (const GLubyte*)"GL_EXT_blend_minmax",\r
+ (const GLubyte*)"GL_EXT_occlusion_query_boolean",\r
+ (const GLubyte*)"GL_EXT_read_format_bgra",\r
+#if (S3TC_SUPPORT)\r
+ (const GLubyte*)"GL_EXT_texture_compression_dxt1",\r
+#endif\r
+ (const GLubyte*)"GL_EXT_texture_filter_anisotropic",\r
+ (const GLubyte*)"GL_EXT_texture_format_BGRA8888",\r
+ (const GLubyte*)"GL_ANGLE_framebuffer_blit",\r
+ (const GLubyte*)"GL_NV_framebuffer_blit",\r
+ (const GLubyte*)"GL_ANGLE_framebuffer_multisample",\r
+#if (S3TC_SUPPORT)\r
+ (const GLubyte*)"GL_ANGLE_texture_compression_dxt3",\r
+ (const GLubyte*)"GL_ANGLE_texture_compression_dxt5",\r
+#endif\r
+ (const GLubyte*)"GL_NV_fence"\r
+ };\r
+ static const GLuint numExtensions = sizeof(extensions) / sizeof(*extensions);\r
+\r
+ if(numExt)\r
+ {\r
+ *numExt = numExtensions;\r
+ return nullptr;\r
+ }\r
+\r
+ if(index == GL_INVALID_INDEX)\r
+ {\r
+ static GLubyte* extensionsCat = nullptr;\r
+ if((extensionsCat == nullptr) && (numExtensions > 0))\r
+ {\r
+ int totalLength = numExtensions; // 1 space between each extension name + terminating null\r
+ for(int i = 0; i < numExtensions; ++i)\r
+ {\r
+ totalLength += strlen(reinterpret_cast<const char*>(extensions[i]));\r
+ }\r
+ extensionsCat = new GLubyte[totalLength];\r
+ extensionsCat[0] = '\0';\r
+ for(int i = 0; i < numExtensions; ++i)\r
+ {\r
+ if(i != 0)\r
+ {\r
+ strcat(reinterpret_cast<char*>(extensionsCat), " ");\r
+ }\r
+ strcat(reinterpret_cast<char*>(extensionsCat), reinterpret_cast<const char*>(extensions[i]));\r
+ }\r
+ }\r
+ return extensionsCat;\r
+ }\r
+\r
+ if(index >= numExtensions)\r
+ {\r
+ return nullptr;\r
+ }\r
+\r
+ return extensions[index];\r
+}\r
+\r
}\r
\r
// Exported functions for use by EGL\r
switch(name)\r
{\r
case GL_VENDOR:\r
- return (GLubyte*)"TransGaming Inc.";\r
+ return (GLubyte*)"Google Inc.";\r
case GL_RENDERER:\r
return (GLubyte*)"SwiftShader";\r
case GL_VERSION:\r
case GL_SHADING_LANGUAGE_VERSION:\r
return (GLubyte*)"OpenGL ES GLSL ES 1.00 SwiftShader " VERSION_STRING;\r
case GL_EXTENSIONS:\r
- // Keep list sorted in following order:\r
- // OES extensions\r
- // EXT extensions\r
- // Vendor extensions\r
- return (GLubyte*)\r
- "GL_OES_compressed_ETC1_RGB8_texture "\r
- "GL_OES_depth_texture "\r
- "GL_OES_depth_texture_cube_map "\r
- "GL_OES_EGL_image "\r
- "GL_OES_EGL_image_external "\r
- "GL_OES_element_index_uint "\r
- "GL_OES_packed_depth_stencil "\r
- "GL_OES_rgb8_rgba8 "\r
- "GL_OES_standard_derivatives "\r
- "GL_OES_texture_float "\r
- "GL_OES_texture_float_linear "\r
- "GL_OES_texture_half_float "\r
- "GL_OES_texture_half_float_linear "\r
- "GL_OES_texture_npot "\r
- "GL_OES_texture_3D "\r
- "GL_EXT_blend_minmax "\r
- "GL_EXT_occlusion_query_boolean "\r
- "GL_EXT_read_format_bgra "\r
- #if (S3TC_SUPPORT)\r
- "GL_EXT_texture_compression_dxt1 "\r
- #endif\r
- "GL_EXT_texture_filter_anisotropic "\r
- "GL_EXT_texture_format_BGRA8888 "\r
- "GL_ANGLE_framebuffer_blit "\r
- "GL_NV_framebuffer_blit "\r
- "GL_ANGLE_framebuffer_multisample "\r
- #if (S3TC_SUPPORT)\r
- "GL_ANGLE_texture_compression_dxt3 "\r
- "GL_ANGLE_texture_compression_dxt5 "\r
- #endif\r
- "GL_NV_fence";\r
+ {\r
+ es2::Context *context = es2::getContext();\r
+ return context ? context->getExtensions(GL_INVALID_INDEX) : (GLubyte*)NULL;\r
+ }\r
default:\r
return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
}\r
{\r
TRACE("(GLenum name = 0x%X, GLuint index = %d)", name, index);\r
\r
- UNIMPLEMENTED();\r
- return nullptr;\r
+ es2::Context *context = es2::getContext();\r
+ if(context)\r
+ {\r
+ GLuint numExtensions;\r
+ context->getExtensions(0, &numExtensions);\r
+\r
+ if(index >= numExtensions)\r
+ {\r
+ return error(GL_INVALID_VALUE, (GLubyte*)NULL);\r
+ }\r
+\r
+ switch(name)\r
+ {\r
+ case GL_EXTENSIONS:\r
+ return context->getExtensions(index);\r
+ default:\r
+ return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
+ }\r
+ }\r
+\r
+ return (GLubyte*)NULL;\r
}\r
\r
void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)\r