4 changed files with 98 additions and 1 deletions
@ -0,0 +1,82 @@ |
|||
#include "utils.h"
|
|||
unsigned char* DecodeBMP(unsigned char*bmpFileData, int&width, int&height) { |
|||
if (0x4D42 == *((unsigned short*)bmpFileData)) { |
|||
int pixelDataOffset = *((int*)(bmpFileData + 10)); |
|||
width = *((int*)(bmpFileData + 18)); |
|||
height = *((int*)(bmpFileData + 22)); |
|||
unsigned char*pixelData = bmpFileData + pixelDataOffset; |
|||
for (int i = 0; i < width*height * 3; i += 3) { |
|||
unsigned char temp = pixelData[i]; |
|||
pixelData[i] = pixelData[i + 2]; |
|||
pixelData[i + 2] = temp; |
|||
} |
|||
return pixelData; |
|||
} |
|||
return nullptr; |
|||
} |
|||
GLuint CreateTexture2D(unsigned char*pixelData, int width, int height, GLenum type) { |
|||
GLuint texture; |
|||
glGenTextures(1, &texture); |
|||
glBindTexture(GL_TEXTURE_2D, texture); |
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
|||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
|||
glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, pixelData); |
|||
glBindTexture(GL_TEXTURE_2D, 0); |
|||
return texture; |
|||
} |
|||
GLuint CreateTexture2DFromBMP(const char*bmpPath) { |
|||
int nFileSize = 0; |
|||
unsigned char *bmpFileContent = LoadFileContent(bmpPath, nFileSize); |
|||
if (bmpFileContent == nullptr) { |
|||
return 0; |
|||
} |
|||
int bmpWidth = 0, bmpHeight = 0; |
|||
unsigned char*pixelData = DecodeBMP(bmpFileContent, bmpWidth, bmpHeight); |
|||
if (bmpWidth == 0) { |
|||
delete bmpFileContent; |
|||
return 0; |
|||
} |
|||
GLuint texture = CreateTexture2D(pixelData, bmpWidth, bmpHeight, GL_RGB); |
|||
delete bmpFileContent; |
|||
return texture; |
|||
} |
|||
GLuint CreateTextureCubeFromBMP(const char *front, const char *back, const char *left, |
|||
const char *right, const char *top, const char *bottom) { |
|||
GLuint texture; |
|||
glGenTextures(1, &texture); |
|||
glBindTexture(GL_TEXTURE_CUBE_MAP, texture); |
|||
int nFileSize = 0, width = 0, height = 0; |
|||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
|||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
|||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
|||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
|||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); |
|||
unsigned char *bmpFileContent = LoadFileContent(front, nFileSize); |
|||
unsigned char*pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
delete bmpFileContent; |
|||
bmpFileContent = LoadFileContent(back, nFileSize); |
|||
pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
delete bmpFileContent; |
|||
bmpFileContent = LoadFileContent(left, nFileSize); |
|||
pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
delete bmpFileContent; |
|||
bmpFileContent = LoadFileContent(right, nFileSize); |
|||
pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
delete bmpFileContent; |
|||
bmpFileContent = LoadFileContent(top, nFileSize); |
|||
pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
delete bmpFileContent; |
|||
bmpFileContent = LoadFileContent(bottom, nFileSize); |
|||
pixelData = DecodeBMP(bmpFileContent, width, height); |
|||
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, pixelData); |
|||
glBindTexture(GL_TEXTURE_CUBE_MAP, 0); |
|||
delete bmpFileContent; |
|||
return texture; |
|||
} |
@ -1,2 +1,8 @@ |
|||
#pragma once |
|||
unsigned char * LoadFileContent(const char*path, int&filesize); |
|||
#include "ggl.h" |
|||
unsigned char * LoadFileContent(const char*path, int&filesize); |
|||
unsigned char * DecodeBMP(unsigned char*bmpFileData, int&width, int&height); |
|||
GLuint CreateTexture2D(unsigned char*pixelData, int width, int height, GLenum type); |
|||
GLuint CreateTexture2DFromBMP(const char *bmpPath); |
|||
GLuint CreateTextureCubeFromBMP(const char *front, const char *back, const char *left, |
|||
const char *right, const char *top, const char *bottom); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue