GLES: Fixed clamp to border.

This commit is contained in:
Branimir Karadžić 2015-09-11 20:05:13 -07:00
parent 72446e998b
commit c31ad50f31
4 changed files with 42 additions and 13 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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)
{

View file

@ -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