A boatload of stuff (to be completed)

This commit is contained in:
artdeell 2024-09-17 16:42:04 +03:00 committed by artdeell
parent ca5de41ce8
commit 70a60a1098
5 changed files with 27 additions and 65 deletions

View File

@ -70,9 +70,8 @@ static void find_esversion(context_t* context) {
} }
if(esmajor == 3) { if(esmajor == 3) {
context->es31 = esminor >= 1; context->es31 = esminor >= 1;
context->es32 = esminor >= 2;
}else if(esmajor > 3) { }else if(esmajor > 3) {
context->es32 = context->es31 = true; context->es31 = true;
} }
return; return;

View File

@ -57,7 +57,7 @@ typedef struct {
typedef struct { typedef struct {
EGLContext phys_context; EGLContext phys_context;
bool context_rdy; bool context_rdy;
bool es31, es32; bool es31;
basevertex_renderer_t basevertex; basevertex_renderer_t basevertex;
GLuint multidraw_element_buffer; GLuint multidraw_element_buffer;
framebuffer_copier_t framebuffer_copier; framebuffer_copier_t framebuffer_copier;

View File

@ -3,5 +3,4 @@ GLESFUNC(glDrawElementsIndirect,PFNGLDRAWELEMENTSINDIRECTPROC)
GLESFUNC(glMultiDrawArraysEXT,PFNGLMULTIDRAWARRAYSEXTPROC) GLESFUNC(glMultiDrawArraysEXT,PFNGLMULTIDRAWARRAYSEXTPROC)
GLESFUNC(glMultiDrawElementsEXT,PFNGLMULTIDRAWELEMENTSEXTPROC) GLESFUNC(glMultiDrawElementsEXT,PFNGLMULTIDRAWELEMENTSEXTPROC)
GLESFUNC(glGetTexLevelParameteriv,PFNGLGETTEXLEVELPARAMETERIVPROC) GLESFUNC(glGetTexLevelParameteriv,PFNGLGETTEXLEVELPARAMETERIVPROC)
GLESFUNC(glGetTexLevelParameterfv,PFNGLGETTEXLEVELPARAMETERFVPROC) GLESFUNC(glGetTexLevelParameterfv,PFNGLGETTEXLEVELPARAMETERIVPROC)
GLESFUNC(glDrawElementsBaseVertex, PFNGLDRAWELEMENTSBASEVERTEXPROC)

View File

@ -32,11 +32,11 @@ void *glMapBuffer(GLenum target, GLenum access) {
case GL_SHADER_STORAGE_BUFFER: case GL_SHADER_STORAGE_BUFFER:
// GL 4.4 // GL 4.4
case GL_QUERY_BUFFER: case GL_QUERY_BUFFER:
printf("ERROR: glMapBuffer unsupported target=0x%x\n", target); printf("ERROR: glMapBuffer unsupported target=0x%x", target);
break; // not supported for now break; // not supported for now
case GL_DRAW_INDIRECT_BUFFER: case GL_DRAW_INDIRECT_BUFFER:
case GL_TEXTURE_BUFFER: case GL_TEXTURE_BUFFER:
printf("ERROR: glMapBuffer unimplemented target=0x%x\n", target); printf("ERROR: glMapBuffer unimplemented target=0x%x", target);
break; break;
} }
@ -79,15 +79,10 @@ static int inline nlevel(int size, int level) {
static bool trigger_texlevelparameter = false; static bool trigger_texlevelparameter = false;
static bool check_texlevelparameter() { void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params) {
if(current_context->es31) return true; if(!current_context) return;
if(trigger_texlevelparameter) return false; // NSLog("glGetTexLevelParameteriv(%x, %d, %x, %p)", target, level, pname, params);
printf("glGetTexLevelParameter* functions are not supported below OpenGL ES 3.1\n"); if (isProxyTexture(target)) {
trigger_texlevelparameter = true;
return false;
}
static void proxy_getlevelparameter(GLenum target, GLint level, GLenum pname, GLint *params) {
switch (pname) { switch (pname) {
case GL_TEXTURE_WIDTH: case GL_TEXTURE_WIDTH:
(*params) = nlevel(current_context->proxy_width, level); (*params) = nlevel(current_context->proxy_width, level);
@ -99,29 +94,15 @@ static void proxy_getlevelparameter(GLenum target, GLint level, GLenum pname, GL
(*params) = current_context->proxy_intformat; (*params) = current_context->proxy_intformat;
break; break;
} }
} } else {
if(trigger_texlevelparameter) return;
void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params) { if(!current_context->es31) {
if(!current_context) return; printf("glGetTexLevelParameter* functions are not supported on your device");
if(isProxyTexture(target)) { trigger_texlevelparameter = true;
GLint param = 0;
proxy_getlevelparameter(target, level, pname, &param);
*params = (GLfloat) param;
return; return;
} }
if(!check_texlevelparameter()) return;
es3_functions.glGetTexLevelParameterfv(target, level, pname, params);
}
void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params) {
if(!current_context) return;
if (isProxyTexture(target)) {
proxy_getlevelparameter(target, level, pname, params);
return;
}
if(!check_texlevelparameter()) return;
es3_functions.glGetTexLevelParameteriv(target, level, pname, params); es3_functions.glGetTexLevelParameteriv(target, level, pname, params);
}
} }
void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data) { void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *data) {

View File

@ -72,25 +72,8 @@ void glGetTexImage( GLenum target,
GLenum format, GLenum format,
GLenum type, GLenum type,
void * pixels) { void * pixels) {
if(!current_context) return; //printf("glGetTexImage(%x, %i, %x, %x, %p)\n", target, level, format, type, pixels);
if(!current_context->es31) goto unsupported_esver; printf("LTW: glGetTexImage is not supported yet\n");
if(format != GL_RGBA && format != GL_RGBA_INTEGER && type != GL_UNSIGNED_BYTE && type != GL_UNSIGNED_INT && type != GL_INT && type != GL_FLOAT) goto unsupported;
framebuffer_copier_t* copier = &current_context->framebuffer_copier;
GLint texture;
es3_functions.glGetIntegerv(get_target_query_param(target), &texture);
es3_functions.glBindFramebuffer(GL_READ_FRAMEBUFFER, copier->tempfb);
es3_functions.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target, texture, level);
GLint w, h;
es3_functions.glGetTexLevelParameteriv(target, level, GL_TEXTURE_WIDTH, &w);
es3_functions.glGetTexLevelParameteriv(target, level, GL_TEXTURE_HEIGHT, &h);
es3_functions.glReadPixels(0, 0, w, h, format, type, pixels);
es3_functions.glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 0);
return;
unsupported_esver:
printf("LTW: glGetTexImage only supported on OpenGL ES 3.1");
return;
unsupported:
printf("LTW: unsupported parameters for glGetTexImage");
} }
void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data) { void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data) {