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 1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "GL2Encoder.h" 1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <assert.h> 1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <ctype.h> 2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#ifndef MIN 2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define MIN(a, b) ((a) < (b) ? (a) : (b)) 2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#endif 2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gVendorString= (GLubyte *) "Android"; 2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gRendererString= (GLubyte *) "Android HW-GLES 2.0"; 2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gVersionString= (GLubyte *) "OpenGL ES 2.0"; 2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic GLubyte *gExtensionsString= (GLubyte *) ""; // no extensions at this point; 2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define SET_ERROR_IF(condition,err) if((condition)) { \ 3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ 3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); \ 3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return; \ 3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define RET_AND_SET_ERROR_IF(condition,err,ret) if((condition)) { \ 3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ALOGE("%s:%s:%d GL error 0x%x\n", __FILE__, __FUNCTION__, __LINE__, err); \ 3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(err); \ 4056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return ret; \ 4156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 4256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGL2Encoder::GL2Encoder(IOStream *stream) : gl2_encoder_context_t(stream) 4556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 4656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_initialized = false; 4756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_state = NULL; 4856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_error = GL_NO_ERROR; 4956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_num_compressedTextureFormats = 0; 5056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_compressedTextureFormats = NULL; 5156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall //overrides 5256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glFlush_enc = set_glFlush(s_glFlush); 5356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glPixelStorei_enc = set_glPixelStorei(s_glPixelStorei); 5456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetString_enc = set_glGetString(s_glGetString); 5556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindBuffer_enc = set_glBindBuffer(s_glBindBuffer); 5656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBufferData_enc = set_glBufferData(s_glBufferData); 5756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBufferSubData_enc = set_glBufferSubData(s_glBufferSubData); 5856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteBuffers_enc = set_glDeleteBuffers(s_glDeleteBuffers); 5956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDrawArrays_enc = set_glDrawArrays(s_glDrawArrays); 6056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDrawElements_enc = set_glDrawElements(s_glDrawElements); 6156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetIntegerv_enc = set_glGetIntegerv(s_glGetIntegerv); 6256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetFloatv_enc = set_glGetFloatv(s_glGetFloatv); 6356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetBooleanv_enc = set_glGetBooleanv(s_glGetBooleanv); 6456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glVertexAttribPointer_enc = set_glVertexAttribPointer(s_glVertexAtrribPointer); 6556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glEnableVertexAttribArray_enc = set_glEnableVertexAttribArray(s_glEnableVertexAttribArray); 6656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDisableVertexAttribArray_enc = set_glDisableVertexAttribArray(s_glDisableVertexAttribArray); 6756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetVertexAttribiv_enc = set_glGetVertexAttribiv(s_glGetVertexAttribiv); 6856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetVertexAttribfv_enc = set_glGetVertexAttribfv(s_glGetVertexAttribfv); 6956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetVertexAttribPointerv = set_glGetVertexAttribPointerv(s_glGetVertexAttribPointerv); 7056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall set_glShaderSource(s_glShaderSource); 7156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall set_glFinish(s_glFinish); 7256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetError_enc = set_glGetError(s_glGetError); 7356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glLinkProgram_enc = set_glLinkProgram(s_glLinkProgram); 7456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteProgram_enc = set_glDeleteProgram(s_glDeleteProgram); 7556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetUniformiv_enc = set_glGetUniformiv(s_glGetUniformiv); 7656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetUniformfv_enc = set_glGetUniformfv(s_glGetUniformfv); 7756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glCreateProgram_enc = set_glCreateProgram(s_glCreateProgram); 7856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glCreateShader_enc = set_glCreateShader(s_glCreateShader); 7956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteShader_enc = set_glDeleteShader(s_glDeleteShader); 8056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glAttachShader_enc = set_glAttachShader(s_glAttachShader); 8156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDetachShader_enc = set_glDetachShader(s_glDetachShader); 8256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetUniformLocation_enc = set_glGetUniformLocation(s_glGetUniformLocation); 8356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUseProgram_enc = set_glUseProgram(s_glUseProgram); 8456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 8556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform1f_enc = set_glUniform1f(s_glUniform1f); 8656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform1fv_enc = set_glUniform1fv(s_glUniform1fv); 8756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform1i_enc = set_glUniform1i(s_glUniform1i); 8856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform1iv_enc = set_glUniform1iv(s_glUniform1iv); 8956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform2f_enc = set_glUniform2f(s_glUniform2f); 9056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform2fv_enc = set_glUniform2fv(s_glUniform2fv); 9156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform2i_enc = set_glUniform2i(s_glUniform2i); 9256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform2iv_enc = set_glUniform2iv(s_glUniform2iv); 9356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform3f_enc = set_glUniform3f(s_glUniform3f); 9456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform3fv_enc = set_glUniform3fv(s_glUniform3fv); 9556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform3i_enc = set_glUniform3i(s_glUniform3i); 9656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform3iv_enc = set_glUniform3iv(s_glUniform3iv); 9756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform4f_enc = set_glUniform4f(s_glUniform4f); 9856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform4fv_enc = set_glUniform4fv(s_glUniform4fv); 9956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform4i_enc = set_glUniform4i(s_glUniform4i); 10056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniform4iv_enc = set_glUniform4iv(s_glUniform4iv); 10156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniformMatrix2fv_enc = set_glUniformMatrix2fv(s_glUniformMatrix2fv); 10256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniformMatrix3fv_enc = set_glUniformMatrix3fv(s_glUniformMatrix3fv); 10356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glUniformMatrix4fv_enc = set_glUniformMatrix4fv(s_glUniformMatrix4fv); 10456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 10556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glActiveTexture_enc = set_glActiveTexture(s_glActiveTexture); 10656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glBindTexture_enc = set_glBindTexture(s_glBindTexture); 10756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glDeleteTextures_enc = set_glDeleteTextures(s_glDeleteTextures); 10856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetTexParameterfv_enc = set_glGetTexParameterfv(s_glGetTexParameterfv); 10956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glGetTexParameteriv_enc = set_glGetTexParameteriv(s_glGetTexParameteriv); 11056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterf_enc = set_glTexParameterf(s_glTexParameterf); 11156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameterfv_enc = set_glTexParameterfv(s_glTexParameterfv); 11256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameteri_enc = set_glTexParameteri(s_glTexParameteri); 11356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall m_glTexParameteriv_enc = set_glTexParameteriv(s_glTexParameteriv); 11456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 11556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 11656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGL2Encoder::~GL2Encoder() 11756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 11856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall delete m_compressedTextureFormats; 11956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 12056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 12156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallGLenum GL2Encoder::s_glGetError(void * self) 12256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 12356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *)self; 12456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum err = ctx->getError(); 12556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall if(err != GL_NO_ERROR) { 12656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->setError(GL_NO_ERROR); 12756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return err; 12856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 12956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 13056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return ctx->m_glGetError_enc(self); 13156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 13256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 13356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 13456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glFlush(void *self) 13556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 13656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *) self; 13756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glFlush_enc(self); 13856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_stream->flush(); 13956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 14056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 14156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallconst GLubyte *GL2Encoder::s_glGetString(void *self, GLenum name) 14256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 14356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLubyte *retval = (GLubyte *) ""; 14456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall switch(name) { 14556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_VENDOR: 14656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gVendorString; 14756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 14856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_RENDERER: 14956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gRendererString; 15056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 15156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_VERSION: 15256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gVersionString; 15356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 15456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall case GL_EXTENSIONS: 15556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall retval = gExtensionsString; 15656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall break; 15756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 15856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall return retval; 15956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 16056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 16156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glPixelStorei(void *self, GLenum param, GLint value) 16256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 16356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *)self; 16456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glPixelStorei_enc(ctx, param, value); 16556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 16656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->setPixelStore(param, value); 16756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 16856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 16956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 17056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glBindBuffer(void *self, GLenum target, GLuint id) 17156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 17256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *) self; 17356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 17456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_state->bindBuffer(target, id); 17556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall // TODO set error state if needed; 17656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBindBuffer_enc(self, target, id); 17756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 17856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 17956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glBufferData(void * self, GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) 18056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 18156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *) self; 18256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLuint bufferId = ctx->m_state->getBuffer(target); 18356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(bufferId==0, GL_INVALID_OPERATION); 18456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(size<0, GL_INVALID_VALUE); 18556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 18656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_shared->updateBufferData(bufferId, size, (void*)data); 18756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBufferData_enc(self, target, size, data, usage); 18856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 18956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 19056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glBufferSubData(void * self, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) 19156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 19256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *) self; 19356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLuint bufferId = ctx->m_state->getBuffer(target); 19456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(bufferId==0, GL_INVALID_OPERATION); 19556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 19656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GLenum res = ctx->m_shared->subUpdateBufferData(bufferId, offset, size, (void*)data); 19756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(res, res); 19856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 19956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glBufferSubData_enc(self, target, offset, size, data); 20056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 20156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 20256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glDeleteBuffers(void * self, GLsizei n, const GLuint * buffers) 20356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 20456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *) self; 20556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall SET_ERROR_IF(n<0, GL_INVALID_VALUE); 20656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall for (int i=0; i<n; i++) { 20756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_shared->deleteBufferData(buffers[i]); 20856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ctx->m_glDeleteBuffers_enc(self,1,&buffers[i]); 20956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall } 21056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall} 21156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 21256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallvoid GL2Encoder::s_glVertexAtrribPointer(void *self, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * ptr) 21356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 21456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall GL2Encoder *ctx = (GL2Encoder *)self; 21556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall assert(ctx->m_state != NULL); 216