浏览代码

Added texture LOD bias setting.

Branimir Karadžić 8 年之前
父节点
当前提交
5a987b3af8
共有 5 个文件被更改,包括 26 次插入14 次删除
  1. 4 0
      src/config.h
  2. 1 1
      src/renderer_d3d11.cpp
  3. 1 1
      src/renderer_d3d12.cpp
  4. 16 12
      src/renderer_gl.cpp
  5. 4 0
      src/renderer_gl.h

+ 4 - 0
src/config.h

@@ -328,4 +328,8 @@
 #	define BGFX_CONFIG_API_SEMAPHORE_TIMEOUT (5000)
 #endif // BGFX_CONFIG_API_SEMAPHORE_TIMEOUT
 
+#ifndef BGFX_CONFIG_MIP_LOD_BIAS
+#	define BGFX_CONFIG_MIP_LOD_BIAS 0
+#endif // BGFX_CONFIG_MIP_LOD_BIAS
+
 #endif // BGFX_CONFIG_H_HEADER_GUARD

+ 1 - 1
src/renderer_d3d11.cpp

@@ -3123,7 +3123,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
 				sd.AddressU       = s_textureAddress[(_flags&BGFX_TEXTURE_U_MASK)>>BGFX_TEXTURE_U_SHIFT];
 				sd.AddressV       = s_textureAddress[(_flags&BGFX_TEXTURE_V_MASK)>>BGFX_TEXTURE_V_SHIFT];
 				sd.AddressW       = s_textureAddress[(_flags&BGFX_TEXTURE_W_MASK)>>BGFX_TEXTURE_W_SHIFT];
-				sd.MipLODBias     = 0.0f;
+				sd.MipLODBias     = float(BGFX_CONFIG_MIP_LOD_BIAS);
 				sd.MaxAnisotropy  = m_maxAnisotropy;
 				sd.ComparisonFunc = 0 == cmpFunc ? D3D11_COMPARISON_NEVER : s_cmpFunc[cmpFunc];
 				sd.BorderColor[0] = _rgba[0];

+ 1 - 1
src/renderer_d3d12.cpp

@@ -3199,7 +3199,7 @@ data.NumQualityLevels = 0;
 			sd.AddressU = s_textureAddress[(flags&BGFX_TEXTURE_U_MASK)>>BGFX_TEXTURE_U_SHIFT];
 			sd.AddressV = s_textureAddress[(flags&BGFX_TEXTURE_V_MASK)>>BGFX_TEXTURE_V_SHIFT];
 			sd.AddressW = s_textureAddress[(flags&BGFX_TEXTURE_W_MASK)>>BGFX_TEXTURE_W_SHIFT];
-			sd.MipLODBias     = 0.0f;
+			sd.MipLODBias     = float(BGFX_CONFIG_MIP_LOD_BIAS);
 			sd.MaxAnisotropy  = maxAnisotropy;
 			sd.ComparisonFunc = 0 == cmpFunc ? D3D12_COMPARISON_FUNC_NEVER : s_cmpFunc[cmpFunc];
 

+ 16 - 12
src/renderer_gl.cpp

@@ -3431,13 +3431,15 @@ namespace bgfx { namespace gl
 						GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, magFilter) );
 						GL_CHECK(glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, minFilter) );
 
-						if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
-						||  m_borderColorSupport)
+						if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
 						{
-							if (hasBorderColor)
-							{
-								GL_CHECK(glSamplerParameterfv(sampler, GL_TEXTURE_BORDER_COLOR, _rgba) );
-							}
+							GL_CHECK(glSamplerParameterf(sampler, GL_TEXTURE_LOD_BIAS, float(BGFX_CONFIG_MIP_LOD_BIAS) ) );
+						}
+
+						if (m_borderColorSupport
+						&&  hasBorderColor)
+						{
+							GL_CHECK(glSamplerParameterfv(sampler, GL_TEXTURE_BORDER_COLOR, _rgba) );
 						}
 
 						if (0 != (_flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )
@@ -5405,13 +5407,15 @@ namespace bgfx { namespace gl
 			GL_CHECK(glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter) );
 			GL_CHECK(glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minFilter) );
 
-			if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
-			||  s_renderGL->m_borderColorSupport)
+			if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
 			{
-				if (hasBorderColor)
-				{
-					GL_CHECK(glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, _rgba) );
-				}
+				GL_CHECK(glTexParameterf(target, GL_TEXTURE_LOD_BIAS, float(BGFX_CONFIG_MIP_LOD_BIAS) ) );
+			}
+
+			if (s_renderGL->m_borderColorSupport
+			&&  hasBorderColor)
+			{
+				GL_CHECK(glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, _rgba) );
 			}
 
 			if (0 != (flags & (BGFX_TEXTURE_MIN_ANISOTROPIC|BGFX_TEXTURE_MAG_ANISOTROPIC) )

+ 4 - 0
src/renderer_gl.h

@@ -935,6 +935,10 @@ typedef uint64_t GLuint64;
 #	define GL_LINE_SMOOTH 0x0B20
 #endif // GL_LINE_SMOOTH
 
+#ifndef GL_TEXTURE_LOD_BIAS
+#	define GL_TEXTURE_LOD_BIAS 0x8501
+#endif // GL_TEXTURE_LOD_BIAS
+
 #if BX_PLATFORM_WINDOWS
 #	include <windows.h>
 #elif BX_PLATFORM_LINUX || BX_PLATFORM_BSD