mirror of
https://github.com/glest/glest-source.git
synced 2025-08-18 14:11:15 +02:00
- fixed shadow mapping by removing the use of the extension: GL_ARB_shadow_ambient
(thanks: asmodeus and Ishmaru) - added some initial work for texture compression (but not active yet)
This commit is contained in:
@@ -299,9 +299,10 @@ void Renderer::initGame(const Game *game){
|
|||||||
|
|
||||||
//shadow mapping
|
//shadow mapping
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
|
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB);
|
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
|
||||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 1.0f-shadowAlpha);
|
//glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 1.0f-shadowAlpha);
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32,
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32,
|
||||||
shadowTextureSize, shadowTextureSize,
|
shadowTextureSize, shadowTextureSize,
|
||||||
@@ -1355,6 +1356,12 @@ void Renderer::renderSurface(const int renderFps) {
|
|||||||
glActiveTexture(fowTexUnit);
|
glActiveTexture(fowTexUnit);
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(fowTex)->getHandle());
|
glBindTexture(GL_TEXTURE_2D, static_cast<const Texture2DGl*>(fowTex)->getHandle());
|
||||||
|
|
||||||
|
//glCompressedTexSubImage2D(
|
||||||
|
// GL_TEXTURE_2D, 0, 0, 0,
|
||||||
|
// fowTex->getPixmap()->getW(), fowTex->getPixmap()->getH(),
|
||||||
|
// GL_ALPHA, GL_UNSIGNED_BYTE, fowTex->getPixmap()->getPixels());
|
||||||
|
|
||||||
glTexSubImage2D(
|
glTexSubImage2D(
|
||||||
GL_TEXTURE_2D, 0, 0, 0,
|
GL_TEXTURE_2D, 0, 0, 0,
|
||||||
fowTex->getPixmap()->getW(), fowTex->getPixmap()->getH(),
|
fowTex->getPixmap()->getW(), fowTex->getPixmap()->getH(),
|
||||||
@@ -2872,7 +2879,8 @@ void Renderer::autoConfig(){
|
|||||||
Config &config= Config::getInstance();
|
Config &config= Config::getInstance();
|
||||||
bool nvidiaCard= toLower(getGlVendor()).find("nvidia")!=string::npos;
|
bool nvidiaCard= toLower(getGlVendor()).find("nvidia")!=string::npos;
|
||||||
bool atiCard= toLower(getGlVendor()).find("ati")!=string::npos;
|
bool atiCard= toLower(getGlVendor()).find("ati")!=string::npos;
|
||||||
bool shadowExtensions = isGlExtensionSupported("GL_ARB_shadow") && isGlExtensionSupported("GL_ARB_shadow_ambient");
|
//bool shadowExtensions = isGlExtensionSupported("GL_ARB_shadow") && isGlExtensionSupported("GL_ARB_shadow_ambient");
|
||||||
|
bool shadowExtensions = isGlExtensionSupported("GL_ARB_shadow");
|
||||||
|
|
||||||
//3D textures
|
//3D textures
|
||||||
config.setBool("Textures3D", isGlExtensionSupported("GL_EXT_texture3D"));
|
config.setBool("Textures3D", isGlExtensionSupported("GL_EXT_texture3D"));
|
||||||
@@ -3349,7 +3357,7 @@ void Renderer::checkGlOptionalCaps() {
|
|||||||
//shadow mapping
|
//shadow mapping
|
||||||
if(shadows == sShadowMapping) {
|
if(shadows == sShadowMapping) {
|
||||||
checkExtension("GL_ARB_shadow", "Shadow Mapping");
|
checkExtension("GL_ARB_shadow", "Shadow Mapping");
|
||||||
checkExtension("GL_ARB_shadow_ambient", "Shadow Mapping");
|
//checkExtension("GL_ARB_shadow_ambient", "Shadow Mapping");
|
||||||
//checkExtension("GL_ARB_depth_texture", "Shadow Mapping");
|
//checkExtension("GL_ARB_depth_texture", "Shadow Mapping");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -768,6 +768,7 @@ int glestMain(int argc, char** argv){
|
|||||||
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_OPENGL_INFO]) == true) {
|
if(hasCommandArgument(argc, argv,GAME_ARGS[GAME_ARG_OPENGL_INFO]) == true) {
|
||||||
//Renderer &renderer= Renderer::getInstance();
|
//Renderer &renderer= Renderer::getInstance();
|
||||||
printf("%s",renderer.getGlInfo().c_str());
|
printf("%s",renderer.getGlInfo().c_str());
|
||||||
|
printf("%s",renderer.getGlMoreInfo().c_str());
|
||||||
|
|
||||||
delete mainWindow;
|
delete mainWindow;
|
||||||
return -1;
|
return -1;
|
||||||
|
@@ -28,6 +28,8 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
GLuint getHandle() const {return handle;}
|
GLuint getHandle() const {return handle;}
|
||||||
|
|
||||||
|
void OutputTextureDebugInfo(const Pixmap2D *pixmap,Texture::Format format, int components, const string path);
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
|
@@ -96,6 +96,44 @@ GLint toInternalFormatGl(Texture::Format format, int components){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GLint toCompressionFormatGl(GLint format) {
|
||||||
|
return format;
|
||||||
|
|
||||||
|
//GL_COMPRESSED_ALPHA <- white things but tile ok!
|
||||||
|
//GL_COMPRESSED_LUMINANCE <- black tiles
|
||||||
|
//GL_COMPRESSED_LUMINANCE_ALPHA <- black tiles
|
||||||
|
//GL_COMPRESSED_INTENSITY <- black tiles
|
||||||
|
//GL_COMPRESSED_RGB <- black tiles
|
||||||
|
//GL_COMPRESSED_RGBA <- black tiles
|
||||||
|
|
||||||
|
// With the following extension (GL_EXT_texture_compression_s3tc)
|
||||||
|
//GL_COMPRESSED_RGB_S3TC_DXT1_EXT
|
||||||
|
//GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
|
||||||
|
//GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
|
||||||
|
//GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
|
||||||
|
|
||||||
|
/*
|
||||||
|
switch(format) {
|
||||||
|
case GL_LUMINANCE:
|
||||||
|
case GL_LUMINANCE8:
|
||||||
|
return GL_COMPRESSED_LUMINANCE;
|
||||||
|
case GL_RGB:
|
||||||
|
case GL_RGB8:
|
||||||
|
//return GL_COMPRESSED_RGB;
|
||||||
|
return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
|
||||||
|
case GL_RGBA:
|
||||||
|
case GL_RGBA8:
|
||||||
|
//return GL_COMPRESSED_RGBA;
|
||||||
|
return GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
||||||
|
case GL_ALPHA:
|
||||||
|
case GL_ALPHA8:
|
||||||
|
return GL_COMPRESSED_ALPHA;
|
||||||
|
default:
|
||||||
|
return format;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
// class Texture1DGl
|
// class Texture1DGl
|
||||||
// =====================================================
|
// =====================================================
|
||||||
@@ -187,6 +225,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy){
|
|||||||
GLint wrap= toWrapModeGl(wrapMode);
|
GLint wrap= toWrapModeGl(wrapMode);
|
||||||
GLint glFormat= toFormatGl(format, pixmap.getComponents());
|
GLint glFormat= toFormatGl(format, pixmap.getComponents());
|
||||||
GLint glInternalFormat= toInternalFormatGl(format, pixmap.getComponents());
|
GLint glInternalFormat= toInternalFormatGl(format, pixmap.getComponents());
|
||||||
|
GLint glCompressionFormat = toCompressionFormatGl(glInternalFormat);
|
||||||
|
|
||||||
//pixel init var
|
//pixel init var
|
||||||
const uint8* pixels= pixmapInit? pixmap.getPixels(): NULL;
|
const uint8* pixels= pixmapInit? pixmap.getPixels(): NULL;
|
||||||
@@ -212,7 +251,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy){
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
int error= gluBuild2DMipmaps(
|
int error= gluBuild2DMipmaps(
|
||||||
GL_TEXTURE_2D, glInternalFormat,
|
GL_TEXTURE_2D, glCompressionFormat,
|
||||||
pixmap.getW(), pixmap.getH(),
|
pixmap.getW(), pixmap.getH(),
|
||||||
glFormat, GL_UNSIGNED_BYTE, pixels);
|
glFormat, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
@@ -229,10 +268,9 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy){
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
GL_TEXTURE_2D, 0, glInternalFormat,
|
GL_TEXTURE_2D, 0, glCompressionFormat,
|
||||||
pixmap.getW(), pixmap.getH(),
|
pixmap.getW(), pixmap.getH(),
|
||||||
0, glFormat, GL_UNSIGNED_BYTE, pixels);
|
0, glFormat, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
GLint error= glGetError();
|
GLint error= glGetError();
|
||||||
|
|
||||||
//throw runtime_error("TEST!");
|
//throw runtime_error("TEST!");
|
||||||
@@ -242,6 +280,8 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy){
|
|||||||
sprintf(szBuf,"Error creating texture 2D, returned: %d [%s] w = %d, h = %d, glInternalFormat = %d, glFormat = %d",error,pixmap.getPath().c_str(),pixmap.getW(),pixmap.getH(),glInternalFormat,glFormat);
|
sprintf(szBuf,"Error creating texture 2D, returned: %d [%s] w = %d, h = %d, glInternalFormat = %d, glFormat = %d",error,pixmap.getPath().c_str(),pixmap.getW(),pixmap.getH(),glInternalFormat,glFormat);
|
||||||
throw runtime_error(szBuf);
|
throw runtime_error(szBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputTextureDebugInfo(&pixmap,format, pixmap.getComponents(),getPath());
|
||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
}
|
}
|
||||||
@@ -348,6 +388,7 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy){
|
|||||||
|
|
||||||
GLint glFormat= toFormatGl(format, currentPixmap->getComponents());
|
GLint glFormat= toFormatGl(format, currentPixmap->getComponents());
|
||||||
GLint glInternalFormat= toInternalFormatGl(format, currentPixmap->getComponents());
|
GLint glInternalFormat= toInternalFormatGl(format, currentPixmap->getComponents());
|
||||||
|
GLint glCompressionFormat = toCompressionFormatGl(glInternalFormat);
|
||||||
|
|
||||||
//pixel init var
|
//pixel init var
|
||||||
const uint8* pixels= pixmapInit? currentPixmap->getPixels(): NULL;
|
const uint8* pixels= pixmapInit? currentPixmap->getPixels(): NULL;
|
||||||
@@ -355,7 +396,7 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy){
|
|||||||
|
|
||||||
if(mipmap){
|
if(mipmap){
|
||||||
int error= gluBuild2DMipmaps(
|
int error= gluBuild2DMipmaps(
|
||||||
target, glInternalFormat,
|
target, glCompressionFormat,
|
||||||
currentPixmap->getW(), currentPixmap->getH(),
|
currentPixmap->getW(), currentPixmap->getH(),
|
||||||
glFormat, GL_UNSIGNED_BYTE, pixels);
|
glFormat, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
@@ -368,7 +409,7 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy){
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
glTexImage2D(
|
glTexImage2D(
|
||||||
target, 0, glInternalFormat,
|
target, 0, glCompressionFormat,
|
||||||
currentPixmap->getW(), currentPixmap->getH(),
|
currentPixmap->getW(), currentPixmap->getH(),
|
||||||
0, glFormat, GL_UNSIGNED_BYTE, pixels);
|
0, glFormat, GL_UNSIGNED_BYTE, pixels);
|
||||||
}
|
}
|
||||||
@@ -380,6 +421,8 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy){
|
|||||||
sprintf(szBuf,"Error creating texture cube, returned: %d [%s] w = %d, h = %d",error,currentPixmap->getPath().c_str(),currentPixmap->getW(),currentPixmap->getH());
|
sprintf(szBuf,"Error creating texture cube, returned: %d [%s] w = %d, h = %d",error,currentPixmap->getPath().c_str(),currentPixmap->getW(),currentPixmap->getH());
|
||||||
throw runtime_error(szBuf);
|
throw runtime_error(szBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OutputTextureDebugInfo(currentPixmap,format, currentPixmap->getComponents(),getPath());
|
||||||
}
|
}
|
||||||
inited= true;
|
inited= true;
|
||||||
|
|
||||||
@@ -396,4 +439,27 @@ void TextureCubeGl::end(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextureGl::OutputTextureDebugInfo(const Pixmap2D *pixmap,Texture::Format format, int components,const string path) {
|
||||||
|
|
||||||
|
GLint glFormat= toFormatGl(format, components);
|
||||||
|
|
||||||
|
printf("**** Texture filename: [%s] format = %d components = %d, glFormat = %d, path [%s]\n",pixmap->getPath().c_str(),format,components,glFormat,path.c_str());
|
||||||
|
|
||||||
|
GLint compressed=0;
|
||||||
|
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &compressed);
|
||||||
|
int error = glGetError();
|
||||||
|
|
||||||
|
printf("**** Texture compressed status: %d, error [%d]\n",compressed,error);
|
||||||
|
|
||||||
|
compressed=0;
|
||||||
|
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &compressed);
|
||||||
|
error = glGetError();
|
||||||
|
printf("**** Texture image size in video RAM: %d, error [%d]\n",compressed,error);
|
||||||
|
|
||||||
|
compressed=0;
|
||||||
|
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &compressed);
|
||||||
|
error = glGetError();
|
||||||
|
printf("**** Texture image compression format used: %d, error [%d]\n",compressed,error);
|
||||||
|
}
|
||||||
|
|
||||||
}}}//end namespace
|
}}}//end namespace
|
||||||
|
@@ -468,6 +468,8 @@ Pixmap2D::~Pixmap2D(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
Pixmap2D* Pixmap2D::loadPath(const string& path) {
|
Pixmap2D* Pixmap2D::loadPath(const string& path) {
|
||||||
|
printf("Loading Pixmap2D [%s]\n",path.c_str());
|
||||||
|
|
||||||
Pixmap2D *pixmap = FileReader<Pixmap2D>::readPath(path);
|
Pixmap2D *pixmap = FileReader<Pixmap2D>::readPath(path);
|
||||||
if(pixmap != NULL) {
|
if(pixmap != NULL) {
|
||||||
pixmap->path = path;
|
pixmap->path = path;
|
||||||
@@ -476,11 +478,12 @@ Pixmap2D* Pixmap2D::loadPath(const string& path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Pixmap2D::load(const string &path) {
|
void Pixmap2D::load(const string &path) {
|
||||||
|
//printf("Loading Pixmap2D [%s]\n",path.c_str());
|
||||||
|
|
||||||
FileReader<Pixmap2D>::readPath(path,this);
|
FileReader<Pixmap2D>::readPath(path,this);
|
||||||
this->path = path;
|
this->path = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Pixmap2D::save(const string &path) {
|
void Pixmap2D::save(const string &path) {
|
||||||
string extension= path.substr(path.find_last_of('.')+1);
|
string extension= path.substr(path.find_last_of('.')+1);
|
||||||
if(extension=="bmp"){
|
if(extension=="bmp"){
|
||||||
|
Reference in New Issue
Block a user