Procházet zdrojové kódy

We do not need that ton of pixel formats

Daniele Bartolini před 12 roky
rodič
revize
7c6809675b

+ 2 - 2
engine/compilers/texture/TextureCompiler.cpp

@@ -76,7 +76,7 @@ size_t TextureCompiler::compile_impl(Filesystem& fs, const char* resource_path)
 		case 2:
 		case 3:
 		{
-			m_texture_header.format = PF_RGB_8;
+			m_texture_header.format = PIXEL_RGB_8;
 
 			m_texture_data_size = m_tga_size * 3;
 			m_texture_data = (uint8_t*)default_allocator().allocate(m_texture_data_size);
@@ -85,7 +85,7 @@ size_t TextureCompiler::compile_impl(Filesystem& fs, const char* resource_path)
 		}
 		case 4:
 		{
-			m_texture_header.format = PF_RGBA_8;
+			m_texture_header.format = PIXEL_RGBA_8;
 
 			m_texture_data_size = m_tga_size * m_tga_channels;
 			m_texture_data = (uint8_t*)default_allocator().allocate(m_texture_data_size);

+ 3 - 59
engine/renderers/PixelFormat.h

@@ -41,73 +41,17 @@ public:
 	{
 		switch (format)
 		{
-			case PF_L_8:
-			case PF_RGB_3_3_2:
-			case PF_BGR_2_3_3:
-			{
-				return 1;
-			}
-			case PF_L_16:
-			case PF_LA_8:
-			case PF_AL_8:
-			case PF_RGB_5_6_5:
-			case PF_BGR_5_6_5:
-			case PF_RGBA_4_4_4_4:
-			case PF_RGBA_5_5_5_1:
-			case PF_ABGR_4_4_4_4:
-			case PF_ABGR_1_5_5_5:
-			{
-				return 2;
-			}
-			case PF_RGB_8:
-			case PF_BGR_8:
+			case PIXEL_RGB_8:
 			{
 				return 3;
 			}
-			case PF_L_32:
-			case PF_L_FLOAT_32:
-			case PF_LA_16:
-			case PF_AL_16:
-			case PF_RGBA_8:
-			case PF_RGBA_8_8_8_8:
-			case PF_RGBA_10_10_10_2:
-			case PF_ABGR_8:
-			case PF_ABGR_8_8_8_8:
-			case PF_ABGR_2_10_10_10:
+			case PIXEL_RGBA_8:
 			{
 				return 4;
 			}
-			case PF_RGB_16:
-			case PF_BGR_16:
-			{
-				return 6;
-			}
-			case PF_LA_32:
-			case PF_LA_FLOAT_32:
-			case PF_AL_32:
-			case PF_AL_FLOAT_32:
-			case PF_RGBA_16:
-			case PF_ABGR_16:
-			{
-				return 8;
-			}
-			case PF_RGB_32:
-			case PF_RGB_FLOAT_32:
-			case PF_BGR_32:
-			case PF_BGR_FLOAT_32:
-			{
-				return 12;
-			}
-			case PF_RGBA_32:
-			case PF_RGBA_FLOAT_32:
-			case PF_ABGR_32:
-			case PF_ABGR_FLOAT_32:
-			{
-				return 16;
-			}
-			case PF_UNKNOWN:
 			default:
 			{
+				CE_ASSERT(false, "Oops, unknown pixel format");
 				return 0;
 			}
 		}

+ 4 - 52
engine/renderers/RendererTypes.h

@@ -121,58 +121,10 @@ enum VertexFormat
 /// Enumerates pixel formats.
 enum PixelFormat
 {
-	PF_L_8 = 0,				///< Luminance only, 8-bit
-	PF_L_16 = 3,			///< Luminance only, 16-bit
-	PF_L_32 = 14,			///< Luminance only, 32-bit integer
-	PF_L_FLOAT_32 = 15,		///< Luminance only, 32-bit flaoting point
-
-	PF_LA_8 = 4,			///< Luminance and alpha, 8-bit each
-	PF_LA_16 = 16,			///< Luminance and alpha, 16-bit each
-	PF_LA_32 = 26,			///< Luminance and alpha, 32-bit integer each
-	PF_LA_FLOAT_32 = 27,	///< Luminance and alpha, 32-bit floating point each
-
-	PF_AL_8 = 5,			///< Luminance and alpha, 8-bit each
-	PF_AL_16 = 17,			///< Luminance and alpha, 16-bit each
-	PF_AL_32 = 28,			///< Luminance and alpha, 32-bit integer each
-	PF_AL_FLOAT_32 = 29,	///< Luminance and alpha, 32-bit floating point each
-
-	PF_RGB_8 = 12,			///< RGB values, 8-bit each
-	PF_RGB_16 = 24,			///< RGB values, 16-bit each
-	PF_RGB_32 = 32,			///< RGB values, 32-bit integer each
-	PF_RGB_FLOAT_32 = 33,	///< RGB values, 32-bit floating point each
-
-	PF_RGB_3_3_2 = 1,		///< Packed 8-bit RGB values
-	PF_RGB_5_6_5 = 6,		///< Packed 16-bit RGB values
-
-	PF_BGR_8 = 13,			///< BGR values, 8-bit each
-	PF_BGR_16 = 25,			///< BGR values, 16-bit each
-	PF_BGR_32 = 34,			///< BGR values, 32-bit integer each
-	PF_BGR_FLOAT_32 = 35,	///< BGR values, 32-bit floating point each
-
-	PF_BGR_2_3_3 = 2,		///< Packed 8-bit BGR values
-	PF_BGR_5_6_5 = 7,		///< Packed 16-bit BGR values
-
-	PF_RGBA_8 = 18,			///< RGBA values, 8-bit each
-	PF_RGBA_16 = 30,		///< RGBA values, 16-bit each
-	PF_RGBA_32 = 36,		///< RGBA values, 32-bit integer each
-	PF_RGBA_FLOAT_32 = 37,	///< RGBA values, 32-bit floating point each
-
-	PF_RGBA_4_4_4_4 = 8,	///< Packed 16-bit RGBA values
-	PF_RGBA_5_5_5_1 = 9,	///< Packed 16-bit RGBA values
-	PF_RGBA_8_8_8_8 = 19,	///< Packed 32-bit RGBA values
-	PF_RGBA_10_10_10_2 = 20,///< Packed 32-bit RGBA values
-
-	PF_ABGR_8 = 21,			///< ABGR values, 8-bit each
-	PF_ABGR_16 = 31,		///< ABGR values, 16-bit each
-	PF_ABGR_32 = 38,		///< ABGR values, 32-bit integer each
-	PF_ABGR_FLOAT_32 = 39,	///< ABGR values, 32-bit floating point each
-
-	PF_ABGR_4_4_4_4 = 10,	///< Packed 16-bit ABGR values
-	PF_ABGR_1_5_5_5 = 11,	///< Packed 16-bit ABGR values
-	PF_ABGR_8_8_8_8 = 22,	///< Packed 32-bit ABGR values
-	PF_ABGR_2_10_10_10 = 23,///< Packed 32-bit ABGR values
-
-	PF_UNKNOWN = 40
+	PIXEL_RGB_8 = 0,
+	PIXEL_RGBA_8,
+
+	PIXEL_COUNT
 };
 
 enum CommandType

+ 7 - 0
engine/renderers/gl/GLRenderer.cpp

@@ -86,6 +86,13 @@ const GLenum TEXTURE_WRAP_TABLE[] =
 	GL_REPEAT
 };
 
+//-----------------------------------------------------------------------------
+const GLTextureFormatInfo TEXTURE_FORMAT_TABLE[PIXEL_COUNT] =
+{
+	{ GL_RGB, GL_RGB },
+	{ GL_RGBA, GL_RGBA}
+};
+
 // Keep in sync with ShaderAttrib
 const char* const SHADER_ATTRIB_NAMES[ATTRIB_COUNT] =
 {

+ 13 - 3
engine/renderers/gl/GLRenderer.h

@@ -47,9 +47,17 @@ OTHER DEALINGS IN THE SOFTWARE.
 namespace crown
 {
 
+//-----------------------------------------------------------------------------
+struct GLTextureFormatInfo
+{
+	GLenum internal_format;
+	GLenum format;
+};
+
 extern const GLenum TEXTURE_MIN_FILTER_TABLE[];
 extern const GLenum TEXTURE_MAG_FILTER_TABLE[];
 extern const GLenum TEXTURE_WRAP_TABLE[];
+extern const GLTextureFormatInfo TEXTURE_FORMAT_TABLE[PIXEL_COUNT];
 extern const char* const SHADER_ATTRIB_NAMES[ATTRIB_COUNT];
 extern const char* const SHADER_UNIFORM_NAMES[];
 extern const size_t UNIFORM_SIZE_TABLE[UNIFORM_END];
@@ -241,9 +249,11 @@ struct Texture
 			GL_CHECK(glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE));
 		#endif
 
-		// FIXME
-		GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
-					 			GL_RGB, GL_UNSIGNED_BYTE, data));
+		GLenum internal_fmt = TEXTURE_FORMAT_TABLE[format].internal_format;
+		GLenum fmt = TEXTURE_FORMAT_TABLE[format].format;
+
+		GL_CHECK(glTexImage2D(GL_TEXTURE_2D, 0, internal_fmt, width, height, 0,
+					 			fmt, GL_UNSIGNED_BYTE, data));
 		GL_CHECK(glBindTexture(GL_TEXTURE_2D, 0));
 
 		m_target = GL_TEXTURE_2D;