From e8409cee8ba9ac03417d25f70494f32fa03e8194 Mon Sep 17 00:00:00 2001 From: Dmitry Toroshchin Date: Fri, 27 Oct 2023 19:42:04 +0300 Subject: [PATCH] ref_gl: vbo: do not do zero-length drawcalls (fix glError on vivante) --- ref/gl/gl_rsurf.c | 49 +++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 1ca42558..be9d2057 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -2389,6 +2389,9 @@ draw details when not enough tmus */ static void R_AdditionalPasses( vboarray_t *vbo, int indexlen, void *indexarray, texture_t *tex, qboolean resetvbo, size_t offset ) { + if( !indexlen ) + return; + // draw details in additional pass if( r_detailtextures.value && r_vbo_detail.value == 1 && mtst.tmu_dt == -1 && tex->dt_texturenum ) { @@ -2773,33 +2776,37 @@ Draw array for given vbotexture_t. build and draw dynamic lightmaps if present */ static void R_DrawLightmappedVBO( vboarray_t *vbo, vbotexture_t *vbotex, texture_t *texture, int lightmap, qboolean skiplighting ) { -#if !defined XASH_NANOGL || defined XASH_WES && XASH_EMSCRIPTEN // WebGL need to know array sizes - if( pglDrawRangeElements ) - pglDrawRangeElements( GL_TRIANGLES, 0, vbo->array_len, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); - else -#endif - pglDrawElements( GL_TRIANGLES, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); - - // draw debug lines - if( gl_wireframe.value && !skiplighting ) + if( vbotex->curindex ) { - R_SetDecalMode( true ); - pglDisable( GL_TEXTURE_2D ); - GL_SelectTexture( XASH_TEXTURE0 ); - pglDisable( GL_TEXTURE_2D ); - pglDisable( GL_DEPTH_TEST ); #if !defined XASH_NANOGL || defined XASH_WES && XASH_EMSCRIPTEN // WebGL need to know array sizes if( pglDrawRangeElements ) - pglDrawRangeElements( GL_LINES, 0, vbo->array_len, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); + pglDrawRangeElements( GL_TRIANGLES, 0, vbo->array_len, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); else #endif - pglDrawElements( GL_LINES, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); - pglEnable( GL_DEPTH_TEST ); - pglEnable( GL_TEXTURE_2D ); - GL_SelectTexture( XASH_TEXTURE1 ); - pglEnable( GL_TEXTURE_2D ); - R_SetDecalMode( false ); + pglDrawElements( GL_TRIANGLES, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); + + // draw debug lines + if( gl_wireframe.value && !skiplighting ) + { + R_SetDecalMode( true ); + pglDisable( GL_TEXTURE_2D ); + GL_SelectTexture( XASH_TEXTURE0 ); + pglDisable( GL_TEXTURE_2D ); + pglDisable( GL_DEPTH_TEST ); +#if !defined XASH_NANOGL || defined XASH_WES && XASH_EMSCRIPTEN // WebGL need to know array sizes + if( pglDrawRangeElements ) + pglDrawRangeElements( GL_LINES, 0, vbo->array_len, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); + else +#endif + pglDrawElements( GL_LINES, vbotex->curindex, GL_VBOINDEX_TYPE, vbotex->indexarray ); + pglEnable( GL_DEPTH_TEST ); + pglEnable( GL_TEXTURE_2D ); + GL_SelectTexture( XASH_TEXTURE1 ); + pglEnable( GL_TEXTURE_2D ); + R_SetDecalMode( false ); + } } + //Msg( "%d %d %d\n", vbo->array_len, vbotex->len, lightmap ); if( skiplighting ) {