mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
Fixing WebGL + Android instancing.
This commit is contained in:
@@ -10,13 +10,9 @@ $output v_color0
|
||||
|
||||
void main()
|
||||
{
|
||||
mat4 model;
|
||||
model[0] = i_data0;
|
||||
model[1] = i_data1;
|
||||
model[2] = i_data2;
|
||||
model[3] = i_data3;
|
||||
mat4 model = mtxFromCols(i_data0, i_data1, i_data2, i_data3);
|
||||
|
||||
vec4 worldPos = instMul(model, vec4(a_position, 1.0) );
|
||||
vec4 worldPos = mul(model, vec4(a_position, 1.0) );
|
||||
gl_Position = mul(u_viewProj, worldPos);
|
||||
v_color0 = a_color0*i_data4;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -112,12 +112,12 @@ namespace bgfx { namespace gl
|
||||
|
||||
// Work around bug https://bugs.chromium.org/p/chromium/issues/detail?id=1045643 in Chrome
|
||||
// by having alpha always enabled.
|
||||
s_attrs.alpha = true;
|
||||
s_attrs.premultipliedAlpha = false;
|
||||
s_attrs.depth = true;
|
||||
s_attrs.stencil = true;
|
||||
s_attrs.alpha = true;
|
||||
s_attrs.premultipliedAlpha = false;
|
||||
s_attrs.depth = true;
|
||||
s_attrs.stencil = true;
|
||||
s_attrs.enableExtensionsByDefault = true;
|
||||
s_attrs.antialias = false;
|
||||
s_attrs.antialias = false;
|
||||
|
||||
s_attrs.minorVersion = 0;
|
||||
const char* canvas = (const char*) _nwh;
|
||||
|
||||
@@ -447,6 +447,10 @@ GL_IMPORT_ARB__(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttri
|
||||
GL_IMPORT_ARB__(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced);
|
||||
GL_IMPORT_ARB__(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced);
|
||||
|
||||
GL_IMPORT______(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisorNV);
|
||||
GL_IMPORT______(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstancedNV);
|
||||
GL_IMPORT______(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstancedNV);
|
||||
|
||||
GL_IMPORT_ARB__(true, PFNGLDRAWBUFFERSPROC, glDrawBuffers);
|
||||
|
||||
GL_IMPORT_ARB__(true, PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer);
|
||||
@@ -547,12 +551,20 @@ GL_IMPORT_OES__(true, PFNGLPROGRAMBINARYPROC, glProgramBina
|
||||
GL_IMPORT_EXT__(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor);
|
||||
GL_IMPORT_EXT__(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced);
|
||||
GL_IMPORT_EXT__(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced);
|
||||
#elif BX_PLATFORM_EMSCRIPTEN
|
||||
GL_IMPORT_ANGLE(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor);
|
||||
GL_IMPORT_ANGLE(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced);
|
||||
GL_IMPORT_ANGLE(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced);
|
||||
#else
|
||||
GL_IMPORT_OES__(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor);
|
||||
GL_IMPORT_OES__(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced);
|
||||
GL_IMPORT_OES__(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced);
|
||||
#endif // BX_PLATFORM_IOS
|
||||
|
||||
GL_IMPORT______(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisorNV);
|
||||
GL_IMPORT______(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstancedNV);
|
||||
GL_IMPORT______(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstancedNV);
|
||||
|
||||
GL_IMPORT_OES__(true, PFNGLBINDVERTEXARRAYPROC, glBindVertexArray);
|
||||
GL_IMPORT_OES__(true, PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays);
|
||||
GL_IMPORT_OES__(true, PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays);
|
||||
|
||||
@@ -626,6 +626,8 @@ namespace bgfx { namespace gl
|
||||
NV_conservative_raster,
|
||||
NV_copy_image,
|
||||
NV_draw_buffers,
|
||||
NV_draw_instanced,
|
||||
NV_instanced_arrays,
|
||||
NV_occlusion_query,
|
||||
NV_texture_border_clamp,
|
||||
NVX_gpu_memory_info,
|
||||
@@ -841,6 +843,8 @@ namespace bgfx { namespace gl
|
||||
{ "NV_conservative_raster", false, true },
|
||||
{ "NV_copy_image", false, true },
|
||||
{ "NV_draw_buffers", false, true }, // GLES2 extension.
|
||||
{ "NV_draw_instanced", false, true }, // GLES2 extension.
|
||||
{ "NV_instanced_arrays", false, true }, // GLES2 extension.
|
||||
{ "NV_occlusion_query", false, true },
|
||||
{ "NV_texture_border_clamp", false, true }, // GLES2 extension.
|
||||
{ "NVX_gpu_memory_info", false, true },
|
||||
@@ -2223,17 +2227,20 @@ namespace bgfx { namespace gl
|
||||
int glVersion;
|
||||
int majorGlVersion = 0;
|
||||
int minorGlVersion = 0;
|
||||
const char *version = m_version;
|
||||
const char* version = m_version;
|
||||
|
||||
while(*version && (*version < '0' || *version > '9') )
|
||||
while (*version && !bx::isNumeric(*version) )
|
||||
{
|
||||
++version;
|
||||
}
|
||||
|
||||
majorGlVersion = atoi(version);
|
||||
minorGlVersion = atoi(version + 2);
|
||||
bx::fromString(&majorGlVersion, version);
|
||||
bx::fromString(&minorGlVersion, version + 2);
|
||||
|
||||
glVersion = majorGlVersion*10 + minorGlVersion;
|
||||
|
||||
BX_TRACE("Parsed version %d (%d.%d).", glVersion, majorGlVersion, minorGlVersion);
|
||||
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(s_vendorIds); ++ii)
|
||||
{
|
||||
const VendorId& vendorId = s_vendorIds[ii];
|
||||
@@ -2967,15 +2974,18 @@ namespace bgfx { namespace gl
|
||||
m_readPixelsFmt = GL_RGBA;
|
||||
}
|
||||
|
||||
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) )
|
||||
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30)
|
||||
|| (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) && glVersion >= 30) )
|
||||
{
|
||||
g_caps.supported |= BGFX_CAPS_INSTANCING;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (s_extension[Extension::ANGLE_instanced_arrays].m_supported
|
||||
|| s_extension[Extension::ARB_instanced_arrays].m_supported
|
||||
|| s_extension[Extension::EXT_instanced_arrays].m_supported)
|
||||
|| s_extension[Extension:: ARB_instanced_arrays].m_supported
|
||||
|| s_extension[Extension:: EXT_instanced_arrays].m_supported
|
||||
|| (s_extension[Extension:: NV_instanced_arrays].m_supported && s_extension[Extension::NV_draw_instanced].m_supported)
|
||||
)
|
||||
{
|
||||
if (NULL != glVertexAttribDivisor
|
||||
&& NULL != glDrawArraysInstanced
|
||||
@@ -2983,6 +2993,16 @@ namespace bgfx { namespace gl
|
||||
{
|
||||
g_caps.supported |= BGFX_CAPS_INSTANCING;
|
||||
}
|
||||
else if (NULL != glVertexAttribDivisorNV
|
||||
&& NULL != glDrawArraysInstancedNV
|
||||
&& NULL != glDrawElementsInstancedNV)
|
||||
{
|
||||
glVertexAttribDivisor = glVertexAttribDivisorNV;
|
||||
glDrawArraysInstanced = glDrawArraysInstancedNV;
|
||||
glDrawElementsInstanced = glDrawElementsInstancedNV;
|
||||
|
||||
g_caps.supported |= BGFX_CAPS_INSTANCING;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == (g_caps.supported & BGFX_CAPS_INSTANCING) )
|
||||
|
||||
Reference in New Issue
Block a user