156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/* 256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Copyright (C) 2011 The Android Open Source Project 356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Licensed under the Apache License, Version 2.0 (the "License"); 556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* you may not use this file except in compliance with the License. 656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* You may obtain a copy of the License at 756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* http://www.apache.org/licenses/LICENSE-2.0 956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 1056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Unless required by applicable law or agreed to in writing, software 1156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* distributed under the License is distributed on an "AS IS" BASIS, 1256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* See the License for the specific language governing permissions and 1456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* limitations under the License. 1556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*/ 1656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "GLEncoder.h" 1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "glUtils.h" 1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "FixedBuffer.h" 1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <cutils/log.h> 2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <assert.h> 2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#ifndef MIN 2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define MIN(a, b) ((a) < (b) ? (a) : (b)) 2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#endif 2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gVendorString= (GLubyte *) "Android"; 2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gRendererString= (GLubyte *) "Android HW-GLES 1.0"; 2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gVersionString= (GLubyte *) "OpenGL ES-CM 1.0"; 2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gExtensionsString= (GLubyte *) ""; // no extensions at this point; 3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define SET_ERROR_IF(condition,err) if((condition)) { \ 3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ 3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); \ 3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; \ 3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define RET_AND_SET_ERROR_IF(condition,err,ret) if((condition)) { \ 3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ 4056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); \ 4156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return ret; \ 4256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 4356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLenum GLEncoder::s_glGetError(void * self) 4556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 4656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 4756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum err = ctx->getError(); 4856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if(err != GL_NO_ERROR) { 4956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(GL_NO_ERROR); 5056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return err; 5156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 5256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return ctx->m_glGetError_enc(self); 5456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 5656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLint * GLEncoder::getCompressedTextureFormats() 5856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 5956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (m_compressedTextureFormats == NULL) { 6056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glGetIntegerv(this, GL_NUM_COMPRESSED_TEXTURE_FORMATS, 6156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall &m_num_compressedTextureFormats); 6256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (m_num_compressedTextureFormats > 0) { 6356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // get number of texture formats; 6456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_compressedTextureFormats = new GLint[m_num_compressedTextureFormats]; 6556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glGetCompressedTextureFormats(this, m_num_compressedTextureFormats, m_compressedTextureFormats); 6656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 6756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 6856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return m_compressedTextureFormats; 6956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 7056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 7156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetIntegerv(void *self, GLenum param, GLint *ptr) 7256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 7356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 7456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 7556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 7656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 7756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (param) { 7856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_COMPRESSED_TEXTURE_FORMATS: { 7956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLint * compressedTextureFormats = ctx->getCompressedTextureFormats(); 8056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (ctx->m_num_compressedTextureFormats > 0 && 8156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall compressedTextureFormats != NULL) { 8256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall memcpy(ptr, compressedTextureFormats, 8356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_num_compressedTextureFormats * sizeof(GLint)); 8456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 8556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 8656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 8756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 8856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_MAX_TEXTURE_UNITS: 8956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetIntegerv_enc(self, param, ptr); 9056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = MIN(*ptr, GLClientState::MAX_TEXTURE_UNITS); 9156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 9256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 9356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_2D: 9456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_2D); 9556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 9656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 9756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_EXTERNAL_OES: 9856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_EXTERNAL_OES); 9956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 10056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 10156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 10256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!state->getClientStateParameter<GLint>(param,ptr)) { 10356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetIntegerv_enc(self, param, ptr); 10456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 10556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 10656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 10756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 10856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 10956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetFloatv(void *self, GLenum param, GLfloat *ptr) 11056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 11156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 11256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 11356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 11456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 11556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (param) { 11656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_COMPRESSED_TEXTURE_FORMATS: { 11756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLint * compressedTextureFormats = ctx->getCompressedTextureFormats(); 11856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (ctx->m_num_compressedTextureFormats > 0 && 11956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall compressedTextureFormats != NULL) { 12056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i = 0; i < ctx->m_num_compressedTextureFormats; i++) { 12156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ptr[i] = (GLfloat) compressedTextureFormats[i]; 12256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 12356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 12456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 12556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 12656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 12756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_MAX_TEXTURE_UNITS: 12856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetFloatv_enc(self, param, ptr); 12956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = MIN(*ptr, (GLfloat)GLClientState::MAX_TEXTURE_UNITS); 13056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 13156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 13256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_2D: 13356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = (GLfloat)state->getBoundTexture(GL_TEXTURE_2D); 13456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 13556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 13656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_EXTERNAL_OES: 13756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = (GLfloat)state->getBoundTexture(GL_TEXTURE_EXTERNAL_OES); 13856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 13956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 14056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 14156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!state->getClientStateParameter<GLfloat>(param,ptr)) { 14256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetFloatv_enc(self, param, ptr); 14356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 14456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 14556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 14656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 14756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 14856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetFixedv(void *self, GLenum param, GLfixed *ptr) 14956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 15056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 15156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 15256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 15356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 15456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (param) { 15556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_COMPRESSED_TEXTURE_FORMATS: { 15656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLint * compressedTextureFormats = ctx->getCompressedTextureFormats(); 15756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (ctx->m_num_compressedTextureFormats > 0 && 15856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall compressedTextureFormats != NULL) { 15956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i = 0; i < ctx->m_num_compressedTextureFormats; i++) { 16056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ptr[i] = compressedTextureFormats[i] << 16; 16156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 16256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 16356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 16456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 16556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 16656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_MAX_TEXTURE_UNITS: 16756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetFixedv_enc(self, param, ptr); 16856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = MIN(*ptr, GLClientState::MAX_TEXTURE_UNITS << 16); 16956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 17056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 17156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_2D: 17256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_2D) << 16; 17356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 17456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 17556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_EXTERNAL_OES: 17656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_EXTERNAL_OES) << 16; 17756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 17856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 17956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 18056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!state->getClientStateParameter<GLfixed>(param,ptr)) { 18156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetFixedv_enc(self, param, ptr); 18256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 18356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 18456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 18556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 18656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 18756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetBooleanv(void *self, GLenum param, GLboolean *ptr) 18856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 18956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 19056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 19156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 19256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 19356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (param) { 19456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_COMPRESSED_TEXTURE_FORMATS: { 19556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLint* compressedTextureFormats = ctx->getCompressedTextureFormats(); 19656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (ctx->m_num_compressedTextureFormats > 0 && 19756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall compressedTextureFormats != NULL) { 19856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i = 0; i < ctx->m_num_compressedTextureFormats; i++) { 19956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ptr[i] = compressedTextureFormats[i] != 0 ? GL_TRUE : GL_FALSE; 20056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 20156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 20256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 20356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 20456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 20556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_2D: 20656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_2D) != 0 ? GL_TRUE : GL_FALSE; 20756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 20856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 20956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_BINDING_EXTERNAL_OES: 21056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *ptr = state->getBoundTexture(GL_TEXTURE_EXTERNAL_OES) != 0 21156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ? GL_TRUE : GL_FALSE; 21256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 21356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 21456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 21556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!state->getClientStateParameter<GLboolean>(param,ptr)) { 21656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetBooleanv_enc(self, param, ptr); 217