mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2025-02-17 20:31:57 -05:00
GLES: Fixed clamp to border.
This commit is contained in:
parent
72446e998b
commit
c31ad50f31
4 changed files with 42 additions and 13 deletions
|
@ -138,10 +138,10 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||
|
||||
bgfx::TextureHandle textures[] =
|
||||
{
|
||||
loadTexture("texture_compression_bc1.dds", BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP),
|
||||
loadTexture("texture_compression_bc2.dds", BGFX_TEXTURE_U_CLAMP),
|
||||
loadTexture("texture_compression_bc3.dds", BGFX_TEXTURE_V_CLAMP),
|
||||
loadTexture("texture_compression_etc1.ktx"),
|
||||
loadTexture("texture_compression_bc1.dds", BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP),
|
||||
loadTexture("texture_compression_bc2.dds", BGFX_TEXTURE_U_CLAMP),
|
||||
loadTexture("texture_compression_bc3.dds", BGFX_TEXTURE_V_CLAMP),
|
||||
loadTexture("texture_compression_etc1.ktx", BGFX_TEXTURE_U_BORDER|BGFX_TEXTURE_V_BORDER),
|
||||
loadTexture("texture_compression_etc2.ktx"),
|
||||
loadTexture("texture_compression_ptc12.pvr"),
|
||||
loadTexture("texture_compression_ptc14.pvr"),
|
||||
|
@ -364,12 +364,12 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||
|
||||
// Set view and projection matrix for view 1.
|
||||
const float aspectRatio = float(height)/float(width);
|
||||
const float size = 10.0f;
|
||||
const float size = 11.0f;
|
||||
bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f);
|
||||
bgfx::setViewTransform(1, NULL, proj);
|
||||
|
||||
|
||||
bx::mtxTranslate(mtx, -8.0f - BX_COUNTOF(textures)*0.1f*0.5f, 1.9f, 0.0f);
|
||||
bx::mtxTranslate(mtx, -size+2.0f - BX_COUNTOF(textures)*0.1f*0.5f, 1.9f, 0.0f);
|
||||
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform(mtx);
|
||||
|
@ -387,11 +387,11 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||
// Submit primitive for rendering to view 1.
|
||||
bgfx::submit(1, programCmp);
|
||||
|
||||
const float xpos = -8.0f - BX_COUNTOF(textures)*0.1f*0.5f;
|
||||
const float xpos = -size+2.0f - BX_COUNTOF(textures)*0.1f*0.5f;
|
||||
|
||||
for (uint32_t ii = 0; ii < BX_COUNTOF(textures); ++ii)
|
||||
{
|
||||
bx::mtxTranslate(mtx, xpos + ii*2.1f, 4.0f, 0.0f);
|
||||
bx::mtxTranslate(mtx, xpos + ii*2.1f, size-6.5f, 0.0f);
|
||||
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform(mtx);
|
||||
|
@ -412,7 +412,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||
|
||||
for (uint32_t ii = 0; ii < numTextures3d; ++ii)
|
||||
{
|
||||
bx::mtxTranslate(mtx, xpos + ii*2.1f, -4.0f, 0.0f);
|
||||
bx::mtxTranslate(mtx, xpos + ii*2.1f, -size+6.5f, 0.0f);
|
||||
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform(mtx);
|
||||
|
@ -431,9 +431,9 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||
bgfx::submit(1, program3d);
|
||||
}
|
||||
|
||||
for (uint32_t ii = 0; ii < 3; ++ii)
|
||||
for (uint32_t ii = 0; ii < 4; ++ii)
|
||||
{
|
||||
bx::mtxTranslate(mtx, xpos + 8*2.1f, -4.0f + ii*2.1f, 0.0f);
|
||||
bx::mtxTranslate(mtx, xpos + (size-2.0f)*2.1f, -size+6.5f + ii*2.1f, 0.0f);
|
||||
|
||||
// Set model matrix for rendering.
|
||||
bgfx::setTransform(mtx);
|
||||
|
|
|
@ -167,6 +167,7 @@ typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum targe
|
|||
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
|
||||
typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
|
||||
typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
|
||||
typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
|
||||
typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
|
||||
|
@ -178,6 +179,7 @@ typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, G
|
|||
typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat* param);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
|
||||
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
|
@ -346,6 +348,7 @@ GL_IMPORT______(true, PFNGLRENDERBUFFERSTORAGEPROC, glRenderbuffe
|
|||
GL_IMPORT______(true, PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample);
|
||||
GL_IMPORT______(true, PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri);
|
||||
GL_IMPORT______(true, PFNGLSAMPLERPARAMETERFPROC, glSamplerParameterf);
|
||||
GL_IMPORT______(true, PFNGLSAMPLERPARAMETERFVPROC, glSamplerParameterfv);
|
||||
GL_IMPORT______(false, PFNGLSCISSORPROC, glScissor);
|
||||
GL_IMPORT______(false, PFNGLSHADERSOURCEPROC, glShaderSource);
|
||||
GL_IMPORT______(false, PFNGLSTENCILFUNCPROC, glStencilFunc);
|
||||
|
@ -359,6 +362,7 @@ GL_IMPORT______(true, PFNGLTEXIMAGE3DPROC, glTexImage3D)
|
|||
GL_IMPORT______(false, PFNGLTEXPARAMETERIPROC, glTexParameteri);
|
||||
GL_IMPORT______(false, PFNGLTEXPARAMETERIVPROC, glTexParameteriv);
|
||||
GL_IMPORT______(false, PFNGLTEXPARAMETERFPROC, glTexParameterf);
|
||||
GL_IMPORT______(false, PFNGLTEXPARAMETERFVPROC, glTexParameterfv);
|
||||
GL_IMPORT______(true, PFNGLTEXSTORAGE2DPROC, glTexStorage2D);
|
||||
GL_IMPORT______(true, PFNGLTEXSTORAGE3DPROC, glTexStorage3D);
|
||||
GL_IMPORT______(false, PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D);
|
||||
|
|
|
@ -155,12 +155,12 @@ namespace bgfx { namespace gl
|
|||
GL_BACK,
|
||||
};
|
||||
|
||||
static const GLenum s_textureAddress[] =
|
||||
static GLenum s_textureAddress[] =
|
||||
{
|
||||
GL_REPEAT,
|
||||
GL_MIRRORED_REPEAT,
|
||||
GL_CLAMP_TO_EDGE,
|
||||
GL_CLAMP,
|
||||
GL_CLAMP_TO_BORDER,
|
||||
};
|
||||
|
||||
static const GLenum s_textureFilterMag[] =
|
||||
|
@ -550,6 +550,7 @@ namespace bgfx { namespace gl
|
|||
MOZ_WEBGL_compressed_texture_s3tc,
|
||||
MOZ_WEBGL_depth_texture,
|
||||
|
||||
NV_texture_border_clamp,
|
||||
NV_draw_buffers,
|
||||
NVX_gpu_memory_info,
|
||||
|
||||
|
@ -747,6 +748,7 @@ namespace bgfx { namespace gl
|
|||
{ "MOZ_WEBGL_compressed_texture_s3tc", false, true },
|
||||
{ "MOZ_WEBGL_depth_texture", false, true },
|
||||
|
||||
{ "NV_texture_border_clamp", false, true }, // GLES2 extension.
|
||||
{ "NV_draw_buffers", false, true }, // GLES2 extension.
|
||||
{ "NVX_gpu_memory_info", false, true },
|
||||
|
||||
|
@ -1778,6 +1780,14 @@ namespace bgfx { namespace gl
|
|||
|
||||
g_caps.supported |= m_glctx.getCaps();
|
||||
|
||||
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES) )
|
||||
{
|
||||
s_textureAddress[BGFX_TEXTURE_U_BORDER>>BGFX_TEXTURE_U_SHIFT] = s_extension[Extension::NV_texture_border_clamp].m_supported
|
||||
? GL_CLAMP_TO_BORDER
|
||||
: GL_CLAMP_TO_EDGE
|
||||
;
|
||||
}
|
||||
|
||||
if (s_extension[Extension::EXT_texture_filter_anisotropic].m_supported)
|
||||
{
|
||||
GL_CHECK(glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &m_maxAnisotropyDefault) );
|
||||
|
@ -2542,6 +2552,9 @@ namespace bgfx { namespace gl
|
|||
GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, magFilter) );
|
||||
GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, minFilter) );
|
||||
|
||||
const float color[] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
GL_CHECK(glSamplerParameterfv(sampler, GL_TEXTURE_BORDER_COLOR, color) );
|
||||
|
||||
if (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
|
||||
&& 0.0f < m_maxAnisotropy)
|
||||
{
|
||||
|
@ -4186,6 +4199,10 @@ namespace bgfx { namespace gl
|
|||
getFilters(flags, 1 < numMips, magFilter, minFilter);
|
||||
GL_CHECK(glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter) );
|
||||
GL_CHECK(glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minFilter) );
|
||||
|
||||
const float color[] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||
GL_CHECK(glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color) );
|
||||
|
||||
if (0 != (flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
|
||||
&& 0.0f < s_renderGL->m_maxAnisotropy)
|
||||
{
|
||||
|
|
|
@ -753,6 +753,14 @@ typedef uint64_t GLuint64;
|
|||
# define GL_DEPTH_CLAMP 0x864F
|
||||
#endif // GL_DEPTH_CLAMP
|
||||
|
||||
#ifndef GL_TEXTURE_BORDER_COLOR
|
||||
# define GL_TEXTURE_BORDER_COLOR 0x1004
|
||||
#endif // GL_TEXTURE_BORDER_COLOR
|
||||
|
||||
#ifndef GL_CLAMP_TO_BORDER
|
||||
# define GL_CLAMP_TO_BORDER 0x812D
|
||||
#endif // GL_CLAMP_TO_BORDER
|
||||
|
||||
#ifndef GL_TEXTURE_CUBE_MAP_SEAMLESS
|
||||
# define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
|
||||
#endif // GL_TEXTURE_CUBE_MAP_SEAMLESS
|
||||
|
|
Loading…
Reference in a new issue