GL: Anisotropic texture.

This commit is contained in:
bkaradzic
2012-12-09 19:20:32 -08:00
parent 4fd2a47d83
commit d16b930a39
3 changed files with 27 additions and 1 deletions

View File

@@ -18,6 +18,7 @@ GL_IMPORT(false, PFNGLTEXIMAGE2DPROC, glTexImage2D);
GL_IMPORT(false, PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D);
GL_IMPORT(false, PFNGLPIXELSTOREI, glPixelStorei);
GL_IMPORT(false, PFNGLTEXPARAMETERIPROC, glTexParameteri);
GL_IMPORT(false, PFNGLTEXPARAMETERFPROC, glTexParameterf);
GL_IMPORT(false, PFNGLBINDTEXTUREPROC, glBindTexture);
GL_IMPORT(false, PFNGLGENTEXTURESPROC, glGenTextures);
GL_IMPORT(false, PFNGLDELETETEXTURESPROC, glDeleteTextures);
@@ -27,6 +28,7 @@ GL_IMPORT(false, PFNGLDISABLEPROC, glDisable);
GL_IMPORT(false, PFNGLVIEWPORTPROC, glViewport);
GL_IMPORT(false, PFNGLDRAWELEMENTSPROC, glDrawElements);
GL_IMPORT(false, PFNGLGETINTEGERVPROC, glGetIntegerv);
GL_IMPORT(false, PFNGLGETFLOATVPROC, glGetFloatv);
GL_IMPORT(false, PFNGLGETSTRINGPROC, glGetString);
GL_IMPORT(false, PFNGLDRAWARRAYSPROC, glDrawArrays);
GL_IMPORT(false, PFNGLBLENDFUNCPROC, glBlendFunc);

View File

@@ -77,7 +77,8 @@ namespace bgfx
struct RendererContext
{
RendererContext()
: m_dxtSupport(false)
: m_maxAnisotropy(0.0f)
, m_dxtSupport(false)
, m_programBinarySupport(false)
, m_flip(false)
, m_postSwapBuffers(NULL)
@@ -530,6 +531,7 @@ namespace bgfx
TextVideoMem m_textVideoMem;
Resolution m_resolution;
float m_maxAnisotropy;
bool m_dxtSupport;
bool m_programBinarySupport;
bool m_flip;
@@ -615,6 +617,7 @@ namespace bgfx
{
enum Enum
{
EXT_texture_filter_anisotropic,
EXT_texture_format_BGRA8888,
EXT_texture_compression_s3tc,
EXT_texture_compression_dxt1,
@@ -659,6 +662,7 @@ namespace bgfx
static Extension s_extension[Extension::Count] =
{
{ "GL_EXT_texture_filter_anisotropic", false, true },
// Nvidia BGRA on Linux bug:
// https://groups.google.com/a/chromium.org/forum/?fromgroups#!topic/chromium-reviews/yFfbUdyeUCQ
{ "GL_EXT_texture_format_BGRA8888", false, !BX_PLATFORM_LINUX },
@@ -1567,6 +1571,11 @@ namespace bgfx
GL_CHECK(glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, s_textureFilter[(_flags&BGFX_TEXTURE_MIN_MASK)>>BGFX_TEXTURE_MIN_SHIFT]) );
GL_CHECK(glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, s_textureFilter[(_flags&BGFX_TEXTURE_MAG_MASK)>>BGFX_TEXTURE_MAG_SHIFT]) );
GL_CHECK(glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, 1 < numMips ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR) );
if (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
&& 0.0f < s_renderCtx.m_maxAnisotropy)
{
glTexParameterf(m_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, s_renderCtx.m_maxAnisotropy);
}
GL_CHECK(glBindTexture(m_target, 0) );
}
@@ -2086,6 +2095,11 @@ namespace bgfx
|| s_extension[Extension::ARB_get_program_binary].m_supported
|| s_extension[Extension::OES_get_program_binary].m_supported
;
if (s_extension[Extension::EXT_texture_filter_anisotropic].m_supported)
{
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &s_renderCtx.m_maxAnisotropy);
}
}
}

View File

@@ -119,6 +119,14 @@
# define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
# endif // GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE
# ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT
# define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
# endif // GL_TEXTURE_MAX_ANISOTROPY_EXT
# ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
# define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
# endif // GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
typedef void (*PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
#endif // BGFX_CONFIG_RENDERER_OPENGL
@@ -150,6 +158,7 @@ typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, G
typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
typedef void (APIENTRYP PFNGLPIXELSTOREI) (GLenum pname, GLint param);
typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
@@ -160,6 +169,7 @@ typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params);
typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *params);
typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);