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); 21756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 21856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 21956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 22056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 22156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 22256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetPointerv(void * self, GLenum param, GLvoid **params) 22356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 22456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder * ctx = (GLEncoder *) self; 22556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 22656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->getClientStatePointer(param,params); 22756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 22856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 22956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glFlush(void *self) 23056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 23156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 23256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glFlush_enc(self); 23356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_stream->flush(); 23456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 23556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 23656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallconst GLubyte *GLEncoder::s_glGetString(void *self, GLenum name) 23756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 23856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLubyte *retval = (GLubyte *) ""; 23956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch(name) { 24056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_VENDOR: 24156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gVendorString; 24256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 24356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_RENDERER: 24456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gRendererString; 24556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 24656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_VERSION: 24756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gVersionString; 24856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 24956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_EXTENSIONS: 25056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gExtensionsString; 25156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 25256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 25356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return retval; 25456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 25556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 25656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glPixelStorei(void *self, GLenum param, GLint value) 25756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 25856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 25956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glPixelStorei_enc(ctx, param, value); 26056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOG_ASSERT(ctx->m_state, "GLEncoder::s_glPixelStorei"); 26156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setPixelStore(param, value); 26256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 26356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 26456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glVertexPointer(void *self, int size, GLenum type, GLsizei stride, const void *data) 26556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 26656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 26756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 26856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(GLClientState::VERTEX_LOCATION, size, type, false, stride, data); 26956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 27056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 27156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glNormalPointer(void *self, GLenum type, GLsizei stride, const void *data) 27256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 27356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 27456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 27556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(GLClientState::NORMAL_LOCATION, 3, type, false, stride, data); 27656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 27756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 27856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glColorPointer(void *self, int size, GLenum type, GLsizei stride, const void *data) 27956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 28056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 28156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 28256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(GLClientState::COLOR_LOCATION, size, type, false, stride, data); 28356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 28456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 28556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glPointsizePointer(void *self, GLenum type, GLsizei stride, const void *data) 28656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 28756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 28856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 28956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(GLClientState::POINTSIZE_LOCATION, 1, type, false, stride, data); 29056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 29156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 29256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glClientActiveTexture(void *self, GLenum texture) 29356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 29456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 29556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 29656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setActiveTexture(texture - GL_TEXTURE0); 29756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 29856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 29956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexcoordPointer(void *self, int size, GLenum type, GLsizei stride, const void *data) 30056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 30156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 30256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 30356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(GL_TEXTURE_COORD_ARRAY); 30456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(loc, size, type, false, stride, data); 30556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 30656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 30756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glMatrixIndexPointerOES(void *self, int size, GLenum type, GLsizei stride, const void * data) 30856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 30956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 31056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 31156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(GL_MATRIX_INDEX_ARRAY_OES); 31256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(loc, size, type, false, stride, data); 31356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 31456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 31556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glWeightPointerOES(void * self, int size, GLenum type, GLsizei stride, const void * data) 31656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 31756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 31856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 31956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(GL_WEIGHT_ARRAY_OES); 32056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setState(loc, size, type, false, stride, data); 32156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 32256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 32356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glEnableClientState(void *self, GLenum state) 32456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 32556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 32656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 32756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(state); 32856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->enable(loc, 1); 32956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 33056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 33156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDisableClientState(void *self, GLenum state) 33256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 33356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 33456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 33556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(state); 33656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->enable(loc, 0); 33756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 33856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 33956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLboolean GLEncoder::s_glIsEnabled(void *self, GLenum cap) 34056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 34156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 34256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 34356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int loc = ctx->m_state->getLocation(cap); 34456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState::VertexAttribState *state = ctx->m_state->getState(loc); 34556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 34656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (state!=NULL) 34756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return state->enabled; 34856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 34956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return ctx->m_glIsEnabled_enc(self,cap); 35056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 35156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 35256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glBindBuffer(void *self, GLenum target, GLuint id) 35356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 35456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 35556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 35656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->bindBuffer(target, id); 35756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // TODO set error state if needed; 35856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindBuffer_enc(self, target, id); 35956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 36056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 36156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glBufferData(void * self, GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) 36256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 36356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 36456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLuint bufferId = ctx->m_state->getBuffer(target); 36556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(bufferId==0, GL_INVALID_OPERATION); 36656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(size<0, GL_INVALID_VALUE); 36756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 36856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_shared->updateBufferData(bufferId, size, (void*)data); 36956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBufferData_enc(self, target, size, data, usage); 37056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 37156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 37256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glBufferSubData(void * self, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) 37356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 37456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 37556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLuint bufferId = ctx->m_state->getBuffer(target); 37656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(bufferId==0, GL_INVALID_OPERATION); 37756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 37856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum res = ctx->m_shared->subUpdateBufferData(bufferId, offset, size, (void*)data); 37956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(res, res); 38056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 38156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBufferSubData_enc(self, target, offset, size, data); 38256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 38356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 38456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDeleteBuffers(void * self, GLsizei n, const GLuint * buffers) 38556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 38656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *) self; 38756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(n<0, GL_INVALID_VALUE); 38856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i=0; i<n; i++) { 38956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_shared->deleteBufferData(buffers[i]); 39056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDeleteBuffers_enc(self,1,&buffers[i]); 39156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 39256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 39356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 39456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::sendVertexData(unsigned int first, unsigned int count) 39556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 39656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(m_state != NULL); 39756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i = 0; i < GLClientState::LAST_LOCATION; i++) { 39856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool enableDirty; 39956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState::VertexAttribState *state = m_state->getStateAndEnableDirty(i, &enableDirty); 40056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 40156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // do not process if state not valid 40256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!state) continue; 40356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 40456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // do not send disable state if state was already disabled 40556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!enableDirty && !state->enabled) continue; 40656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 40756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if ( i >= GLClientState::TEXCOORD0_LOCATION && 40856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall i <= GLClientState::TEXCOORD7_LOCATION ) { 40956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glClientActiveTexture_enc(this, GL_TEXTURE0 + i - GLClientState::TEXCOORD0_LOCATION); 41056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 41156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 41256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (state->enabled) { 41356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 41456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (enableDirty) 41556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glEnableClientState_enc(this, state->glConst); 41656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 41756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall unsigned int datalen = state->elementSize * count; 41856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int stride = state->stride; 41956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (stride == 0) stride = state->elementSize; 42056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int firstIndex = stride * first; 42156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 42256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (state->bufferObject == 0) { 42356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 42456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch(i) { 42556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::VERTEX_LOCATION: 42656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glVertexPointerData(this, state->size, state->type, state->stride, 42756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)state->data + firstIndex, datalen); 42856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 42956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::NORMAL_LOCATION: 43056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glNormalPointerData(this, state->type, state->stride, 43156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)state->data + firstIndex, datalen); 43256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 43356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::COLOR_LOCATION: 43456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glColorPointerData(this, state->size, state->type, state->stride, 43556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)state->data + firstIndex, datalen); 43656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 43756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD0_LOCATION: 43856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD1_LOCATION: 43956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD2_LOCATION: 44056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD3_LOCATION: 44156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD4_LOCATION: 44256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD5_LOCATION: 44356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD6_LOCATION: 44456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD7_LOCATION: 44556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glTexCoordPointerData(this, i - GLClientState::TEXCOORD0_LOCATION, state->size, state->type, state->stride, 44656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)state->data + firstIndex, datalen); 44756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 44856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::POINTSIZE_LOCATION: 44956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glPointSizePointerData(this, state->type, state->stride, 45056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *) state->data + firstIndex, datalen); 45156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 45256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::WEIGHT_LOCATION: 45356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glWeightPointerData(this, state->size, state->type, state->stride, 45456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char * ) state->data + firstIndex, datalen); 45556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 45656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::MATRIXINDEX_LOCATION: 45756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glMatrixIndexPointerData(this, state->size, state->type, state->stride, 45856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)state->data + firstIndex, datalen); 45956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 46056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 46156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 46256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, state->bufferObject); 46356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 46456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch(i) { 46556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::VERTEX_LOCATION: 46656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glVertexPointerOffset(this, state->size, state->type, state->stride, 46756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint)state->data + firstIndex); 46856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 46956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::NORMAL_LOCATION: 47056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glNormalPointerOffset(this, state->type, state->stride, 47156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint) state->data + firstIndex); 47256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 47356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::POINTSIZE_LOCATION: 47456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glPointSizePointerOffset(this, state->type, state->stride, 47556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint) state->data + firstIndex); 47656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 47756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::COLOR_LOCATION: 47856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glColorPointerOffset(this, state->size, state->type, state->stride, 47956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint) state->data + firstIndex); 48056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 48156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD0_LOCATION: 48256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD1_LOCATION: 48356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD2_LOCATION: 48456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD3_LOCATION: 48556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD4_LOCATION: 48656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD5_LOCATION: 48756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD6_LOCATION: 48856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::TEXCOORD7_LOCATION: 48956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glTexCoordPointerOffset(this, state->size, state->type, state->stride, 49056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint) state->data + firstIndex); 49156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 49256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::WEIGHT_LOCATION: 49356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glWeightPointerOffset(this,state->size,state->type,state->stride, 49456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint)state->data+firstIndex); 49556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 49656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GLClientState::MATRIXINDEX_LOCATION: 49756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->glMatrixIndexPointerOffset(this,state->size,state->type,state->stride, 49856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (GLuint)state->data+firstIndex); 49956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 50056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 50156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->m_glBindBuffer_enc(this, GL_ARRAY_BUFFER, m_state->currentArrayVbo()); 50256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 50356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 50456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall this->m_glDisableClientState_enc(this, state->glConst); 50556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 50656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 50756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 50856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 50956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDrawArrays(void *self, GLenum mode, GLint first, GLsizei count) 51056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 51156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 51256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 51356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->sendVertexData(first, count); 51456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDrawArrays_enc(ctx, mode, /*first*/ 0, count); 51556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 51656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 51756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDrawElements(void *self, GLenum mode, GLsizei count, GLenum type, const void *indices) 51856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 51956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 52056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 52156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 52256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(count<0, GL_INVALID_VALUE); 52356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 52456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool has_immediate_arrays = false; 52556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool has_indirect_arrays = false; 52656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 52756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i = 0; i < GLClientState::LAST_LOCATION; i++) { 52856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState::VertexAttribState *state = ctx->m_state->getState(i); 52956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (state->enabled) { 53056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (state->bufferObject != 0) { 53156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall has_indirect_arrays = true; 53256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 53356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall has_immediate_arrays = true; 53456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 53556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 53656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 53756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 53856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!has_immediate_arrays && !has_indirect_arrays) { 53956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("glDrawElements: no data bound to the command - ignoring\n"); 54056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; 54156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 54256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 54356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool adjustIndices = true; 54456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (ctx->m_state->currentIndexVbo() != 0) { 54556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (!has_immediate_arrays) { 54656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->sendVertexData(0, count); 54756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindBuffer_enc(self, GL_ELEMENT_ARRAY_BUFFER, ctx->m_state->currentIndexVbo()); 54856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->glDrawElementsOffset(ctx, mode, count, type, (GLuint)indices); 54956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall adjustIndices = false; 55056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 55156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall BufferData * buf = ctx->m_shared->getBufferData(ctx->m_state->currentIndexVbo()); 55256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindBuffer_enc(self, GL_ELEMENT_ARRAY_BUFFER, 0); 55356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall indices = (void*)((GLintptr)buf->m_fixedBuffer.ptr() + (GLintptr)indices); 55456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 55556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 55656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (adjustIndices) { 55756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall void *adjustedIndices = (void*)indices; 55856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int minIndex = 0, maxIndex = 0; 55956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 56056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch(type) { 56156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_BYTE: 56256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_UNSIGNED_BYTE: 56356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLUtils::minmax<unsigned char>((unsigned char *)indices, count, &minIndex, &maxIndex); 56456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (minIndex != 0) { 56556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall adjustedIndices = ctx->m_fixedBuffer.alloc(glSizeof(type) * count); 56656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLUtils::shiftIndices<unsigned char>((unsigned char *)indices, 56756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned char *)adjustedIndices, 56856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall count, -minIndex); 56956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 57056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 57156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_SHORT: 57256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_UNSIGNED_SHORT: 57356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLUtils::minmax<unsigned short>((unsigned short *)indices, count, &minIndex, &maxIndex); 57456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (minIndex != 0) { 57556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall adjustedIndices = ctx->m_fixedBuffer.alloc(glSizeof(type) * count); 57656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLUtils::shiftIndices<unsigned short>((unsigned short *)indices, 57756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall (unsigned short *)adjustedIndices, 57856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall count, -minIndex); 57956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 58056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 58156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 58256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("unsupported index buffer type %d\n", type); 58356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 58456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (has_indirect_arrays || 1) { 58556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->sendVertexData(minIndex, maxIndex - minIndex + 1); 58656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->glDrawElementsData(ctx, mode, count, type, adjustedIndices, 58756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall count * glSizeof(type)); 58856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // XXX - OPTIMIZATION (see the other else branch) should be implemented 58956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if(!has_indirect_arrays) { 59056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall //ALOGD("unoptimized drawelements !!!\n"); 59156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 59256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 59356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // we are all direct arrays and immidate mode index array - 59456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // rebuild the arrays and the index array; 59556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("glDrawElements: direct index & direct buffer data - will be implemented in later versions;\n"); 59656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 59756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 59856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 59956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 60056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glActiveTexture(void* self, GLenum texture) 60156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 60256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 60356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 60456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum err; 60556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 60656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if ((err = state->setActiveTextureUnit(texture)) != GL_NO_ERROR) { 60756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error %#x\n", __FILE__, __FUNCTION__, __LINE__, err); 60856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); 60956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; 61056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 61156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 61256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glActiveTexture_enc(ctx, texture); 61356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 61456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 61556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glBindTexture(void* self, GLenum target, GLuint texture) 61656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 61756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 61856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 61956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum err; 62056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 62156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLboolean firstUse; 62256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if ((err = state->bindTexture(target, texture, &firstUse)) != GL_NO_ERROR) { 62356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error %#x\n", __FILE__, __FUNCTION__, __LINE__, err); 62456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); 62556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; 62656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 62756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 62856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES) { 62956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, target, texture); 63056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; 63156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 63256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 63356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum priorityTarget = state->getPriorityEnabledTarget(GL_TEXTURE_2D); 63456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 63556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_EXTERNAL_OES && firstUse) { 63656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // set TEXTURE_EXTERNAL_OES default states which differ from TEXTURE_2D 63756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, GL_TEXTURE_2D, texture); 63856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteri_enc(ctx, GL_TEXTURE_2D, 63956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_TEXTURE_MIN_FILTER, GL_LINEAR); 64056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteri_enc(ctx, GL_TEXTURE_2D, 64156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 64256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteri_enc(ctx, GL_TEXTURE_2D, 64356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 64456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 64556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target != priorityTarget) { 64656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, GL_TEXTURE_2D, 64756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->getBoundTexture(GL_TEXTURE_2D)); 64856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 64956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 65056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 65156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == priorityTarget) { 65256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, GL_TEXTURE_2D, texture); 65356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 65456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 65556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 65656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDeleteTextures(void* self, GLsizei n, const GLuint* textures) 65756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 65856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 65956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 66056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 66156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->deleteTextures(n, textures); 66256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDeleteTextures_enc(ctx, n, textures); 66356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 66456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 66556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glDisable(void* self, GLenum cap) 66656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 66756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 66856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 66956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 67056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (cap == GL_TEXTURE_2D || cap == GL_TEXTURE_EXTERNAL_OES) { 67156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum prevTarget = state->getPriorityEnabledTarget(GL_INVALID_ENUM); 67256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->disableTextureTarget(cap); 67356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum currTarget = state->getPriorityEnabledTarget(GL_INVALID_ENUM); 67456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 67556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (prevTarget != currTarget) { 67656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (currTarget == GL_INVALID_ENUM) { 67756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDisable_enc(ctx, GL_TEXTURE_2D); 67856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall currTarget = GL_TEXTURE_2D; 67956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 68056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // maintain the invariant that when TEXTURE_EXTERNAL_OES is 68156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // disabled, the TEXTURE_2D binding is active, even if 68256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // TEXTURE_2D is also disabled. 68356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, GL_TEXTURE_2D, 68456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->getBoundTexture(currTarget)); 68556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 68656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 68756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 68856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDisable_enc(ctx, cap); 68956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 69056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 69156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 69256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glEnable(void* self, GLenum cap) 69356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 69456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 69556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLClientState* state = ctx->m_state; 69656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 69756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (cap == GL_TEXTURE_2D || cap == GL_TEXTURE_EXTERNAL_OES) { 69856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum prevTarget = state->getPriorityEnabledTarget(GL_INVALID_ENUM); 69956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->enableTextureTarget(cap); 70056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum currTarget = state->getPriorityEnabledTarget(GL_INVALID_ENUM); 70156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 70256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (prevTarget != currTarget) { 70356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (prevTarget == GL_INVALID_ENUM) { 70456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glEnable_enc(ctx, GL_TEXTURE_2D); 70556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 70656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (currTarget == GL_TEXTURE_EXTERNAL_OES) { 70756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindTexture_enc(ctx, GL_TEXTURE_2D, 70856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall state->getBoundTexture(currTarget)); 70956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 71056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 71156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 71256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 71356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glEnable_enc(ctx, cap); 71456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 71556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 71656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 71756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetTexParameterfv(void* self, 71856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLfloat* params) 71956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 72056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 72156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 72256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 72356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 72456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 72556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameterfv_enc(ctx, GL_TEXTURE_2D, pname, params); 72656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 72756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 72856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameterfv_enc(ctx, target, pname, params); 72956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 73056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 73156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 73256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetTexParameteriv(void* self, 73356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLint* params) 73456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 73556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 73656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 73756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 73856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (pname) { 73956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES: 74056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *params = 1; 74156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 74256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 74356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 74456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 74556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 74656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameteriv_enc(ctx, GL_TEXTURE_2D, pname, params); 74756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 74856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 74956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameteriv_enc(ctx, target, pname, params); 75056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 75156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 75256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 75356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 75456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 75556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glGetTexParameterxv(void* self, 75656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLfixed* params) 75756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 75856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 75956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 76056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 76156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 76256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 76356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameterxv_enc(ctx, GL_TEXTURE_2D, pname, params); 76456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 76556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 76656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glGetTexParameterxv_enc(ctx, target, pname, params); 76756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 76856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 76956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 77056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic bool isValidTextureExternalParam(GLenum pname, GLenum param) 77156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 77256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch (pname) { 77356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_MIN_FILTER: 77456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_MAG_FILTER: 77556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return param == GL_NEAREST || param == GL_LINEAR; 77656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 77756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_WRAP_S: 77856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_TEXTURE_WRAP_T: 77956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return param == GL_CLAMP_TO_EDGE; 78056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 78156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_GENERATE_MIPMAP: 78256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return param == GL_FALSE; 78356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 78456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall default: 78556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return true; 78656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 78756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 78856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 78956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameterf(void* self, 79056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLfloat param) 79156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 79256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 79356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 79456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 79556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 79656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)param)), 79756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 79856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 79956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 80056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 80156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterf_enc(ctx, GL_TEXTURE_2D, pname, param); 80256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 80356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 80456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterf_enc(ctx, target, pname, param); 80556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 80656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 80756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 80856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameterfv(void* self, 80956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, const GLfloat* params) 81056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 81156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 81256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 81356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 81456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 81556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)params[0])), 81656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 81756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 81856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 81956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 82056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterfv_enc(ctx, GL_TEXTURE_2D, pname, params); 82156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 82256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 82356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterfv_enc(ctx, target, pname, params); 82456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 82556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 82656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 82756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameteri(void* self, 82856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLint param) 82956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 83056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 83156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 83256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 83356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 83456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)param)), 83556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 83656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 83756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 83856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 83956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteri_enc(ctx, GL_TEXTURE_2D, pname, param); 84056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 84156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 84256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteri_enc(ctx, target, pname, param); 84356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 84456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 84556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 84656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameterx(void* self, 84756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, GLfixed param) 84856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 84956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 85056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 85156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 85256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 85356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)param)), 85456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 85556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 85656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 85756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 85856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterx_enc(ctx, GL_TEXTURE_2D, pname, param); 85956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 86056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 86156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterx_enc(ctx, target, pname, param); 86256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 86356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 86456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 86556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameteriv(void* self, 86656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, const GLint* params) 86756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 86856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 86956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 87056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 87156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 87256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)params[0])), 87356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 87456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 87556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 87656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 87756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteriv_enc(ctx, GL_TEXTURE_2D, pname, params); 87856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 87956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 88056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameteriv_enc(ctx, target, pname, params); 88156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 88256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 88356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 88456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glTexParameterxv(void* self, 88556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum target, GLenum pname, const GLfixed* params) 88656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 88756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder* ctx = (GLEncoder*)self; 88856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const GLClientState* state = ctx->m_state; 88956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 89056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF((target == GL_TEXTURE_EXTERNAL_OES && 89156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall !isValidTextureExternalParam(pname, (GLenum)params[0])), 89256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL_INVALID_ENUM); 89356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 89456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if (target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) { 89556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->override2DTextureTarget(target); 89656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterxv_enc(ctx, GL_TEXTURE_2D, pname, params); 89756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->restore2DTextureTarget(); 89856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } else { 89956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glTexParameterxv_enc(ctx, target, pname, params); 90056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 90156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 90256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 90356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::override2DTextureTarget(GLenum target) 90456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 90556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if ((target == GL_TEXTURE_2D || target == GL_TEXTURE_EXTERNAL_OES) && 90656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall target != m_state->getPriorityEnabledTarget(GL_TEXTURE_2D)) { 90756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindTexture_enc(this, GL_TEXTURE_2D, 90856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_state->getBoundTexture(target)); 90956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 91056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 91156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 91256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::restore2DTextureTarget() 91356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 91456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum priorityTarget = m_state->getPriorityEnabledTarget(GL_TEXTURE_2D); 91556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindTexture_enc(this, GL_TEXTURE_2D, 91656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_state->getBoundTexture(priorityTarget)); 91756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 91856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 91956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLEncoder::GLEncoder(IOStream *stream) : gl_encoder_context_t(stream) 92056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 92156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_initialized = false; 92256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_state = NULL; 92356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_error = GL_NO_ERROR; 92456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_num_compressedTextureFormats = 0; 92556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_compressedTextureFormats = NULL; 92656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // overrides; 92756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glFlush_enc = set_glFlush(s_glFlush); 92856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glPixelStorei_enc = set_glPixelStorei(s_glPixelStorei); 92956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glVertexPointer_enc = set_glVertexPointer(s_glVertexPointer); 93056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glNormalPointer_enc = set_glNormalPointer(s_glNormalPointer); 93156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glColorPointer_enc = set_glColorPointer(s_glColorPointer); 93256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glPointSizePointerOES_enc = set_glPointSizePointerOES(s_glPointsizePointer); 93356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glClientActiveTexture_enc = set_glClientActiveTexture(s_glClientActiveTexture); 93456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexCoordPointer_enc = set_glTexCoordPointer(s_glTexcoordPointer); 93556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glMatrixIndexPointerOES_enc = set_glMatrixIndexPointerOES(s_glMatrixIndexPointerOES); 93656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glWeightPointerOES_enc = set_glWeightPointerOES(s_glWeightPointerOES); 93756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 93856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetIntegerv_enc = set_glGetIntegerv(s_glGetIntegerv); 93956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetFloatv_enc = set_glGetFloatv(s_glGetFloatv); 94056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetBooleanv_enc = set_glGetBooleanv(s_glGetBooleanv); 94156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetFixedv_enc = set_glGetFixedv(s_glGetFixedv); 94256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetPointerv_enc = set_glGetPointerv(s_glGetPointerv); 94356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 94456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindBuffer_enc = set_glBindBuffer(s_glBindBuffer); 94556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBufferData_enc = set_glBufferData(s_glBufferData); 94656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBufferSubData_enc = set_glBufferSubData(s_glBufferSubData); 94756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteBuffers_enc = set_glDeleteBuffers(s_glDeleteBuffers); 94856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 94956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glEnableClientState_enc = set_glEnableClientState(s_glEnableClientState); 95056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDisableClientState_enc = set_glDisableClientState(s_glDisableClientState); 95156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glIsEnabled_enc = set_glIsEnabled(s_glIsEnabled); 95256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDrawArrays_enc = set_glDrawArrays(s_glDrawArrays); 95356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDrawElements_enc = set_glDrawElements(s_glDrawElements); 95456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall set_glGetString(s_glGetString); 95556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall set_glFinish(s_glFinish); 95656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetError_enc = set_glGetError(s_glGetError); 95756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 95856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glActiveTexture_enc = set_glActiveTexture(s_glActiveTexture); 95956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindTexture_enc = set_glBindTexture(s_glBindTexture); 96056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteTextures_enc = set_glDeleteTextures(s_glDeleteTextures); 96156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDisable_enc = set_glDisable(s_glDisable); 96256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glEnable_enc = set_glEnable(s_glEnable); 96356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetTexParameterfv_enc = set_glGetTexParameterfv(s_glGetTexParameterfv); 96456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetTexParameteriv_enc = set_glGetTexParameteriv(s_glGetTexParameteriv); 96556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetTexParameterxv_enc = set_glGetTexParameterxv(s_glGetTexParameterxv); 96656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterf_enc = set_glTexParameterf(s_glTexParameterf); 96756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterfv_enc = set_glTexParameterfv(s_glTexParameterfv); 96856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameteri_enc = set_glTexParameteri(s_glTexParameteri); 96956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterx_enc = set_glTexParameterx(s_glTexParameterx); 97056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameteriv_enc = set_glTexParameteriv(s_glTexParameteriv); 97156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterxv_enc = set_glTexParameterxv(s_glTexParameterxv); 97256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 97356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 97456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLEncoder::~GLEncoder() 97556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 97656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall delete [] m_compressedTextureFormats; 97756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 97856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 97956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallsize_t GLEncoder::pixelDataSize(GLsizei width, GLsizei height, GLenum format, GLenum type, int pack) 98056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 98156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(m_state != NULL); 98256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return m_state->pixelDataSize(width, height, format, type, pack); 98356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 98456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 98556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GLEncoder::s_glFinish(void *self) 98656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 98756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLEncoder *ctx = (GLEncoder *)self; 98856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->glFinishRoundTrip(self); 98956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 990