SuperTux: switched to 16bpp videomode, because it's slow on some levels for totally no reason,
it's just a 2D game without any fancy graphice, why does it lag even on Note 3?
This commit is contained in:
Submodule project/jni/application/hid-pc-keyboard/src updated: 201a409e15...4fc1dfce23
@@ -7,7 +7,7 @@ AppName="SuperTux"
|
|||||||
AppFullName=org.lethargik.supertux2
|
AppFullName=org.lethargik.supertux2
|
||||||
|
|
||||||
# Application version code (integer)
|
# Application version code (integer)
|
||||||
AppVersionCode=03406
|
AppVersionCode=3406
|
||||||
|
|
||||||
# Application user-visible version name (string)
|
# Application user-visible version name (string)
|
||||||
AppVersionName="0.3.4.06"
|
AppVersionName="0.3.4.06"
|
||||||
@@ -17,8 +17,8 @@ AppVersionName="0.3.4.06"
|
|||||||
# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped
|
# If the URL in in the form ':dir/file.dat:http://URL/' it will be downloaded as binary BLOB to the application dir and not unzipped
|
||||||
# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir -
|
# If the URL does not contain 'http://' it is treated as file from 'project/jni/application/src/AndroidData' dir -
|
||||||
# these files are put inside .apk package by build system
|
# these files are put inside .apk package by build system
|
||||||
# Also please avoid 'https://' URLs, many Android devices do not have trust certificates and will fail to connect to SF.net over HTTPS
|
# You can specify Google Play expansion files in the form 'obb:main.12345' or 'obb:patch.12345' where 12345 is the app version, first associated with the file
|
||||||
AppDataDownloadUrl="!Data files|:data.zip:http://sourceforge.net/projects/libsdl-android/files/SuperTux/data-3.zip"
|
AppDataDownloadUrl="!Data files|:data.zip:obb:patch.3406|:data.zip:http://sourceforge.net/projects/libsdl-android/files/SuperTux/data-3.zip"
|
||||||
|
|
||||||
# Reset SDL config when updating application to the new version (y) / (n)
|
# Reset SDL config when updating application to the new version (y) / (n)
|
||||||
ResetSdlConfigForThisVersion=y
|
ResetSdlConfigForThisVersion=y
|
||||||
@@ -38,7 +38,7 @@ ScreenOrientation=h
|
|||||||
|
|
||||||
# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only
|
# Video color depth - 16 BPP is the fastest and supported for all modes, 24 bpp is supported only
|
||||||
# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32)
|
# with SwVideoMode=y, SDL_OPENGL mode supports everything. (16)/(24)/(32)
|
||||||
VideoDepthBpp=24
|
VideoDepthBpp=16
|
||||||
|
|
||||||
# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n)
|
# Enable OpenGL depth buffer (needed only for 3-d applications, small speed decrease) (y) or (n)
|
||||||
NeedDepthBuffer=n
|
NeedDepthBuffer=n
|
||||||
@@ -219,7 +219,7 @@ NDK_TOOLCHAIN_VERSION=4.8
|
|||||||
|
|
||||||
# Specify architectures to compile, 'all' or 'y' to compile for all architectures.
|
# Specify architectures to compile, 'all' or 'y' to compile for all architectures.
|
||||||
# Available architectures: armeabi armeabi-v7a armeabi-v7a-hard x86 mips
|
# Available architectures: armeabi armeabi-v7a armeabi-v7a-hard x86 mips
|
||||||
MultiABI='armeabi-v7a' # x86 mips
|
MultiABI='armeabi-v7a x86 mips'
|
||||||
|
|
||||||
# Optional shared libraries to compile - removing some of them will save space
|
# Optional shared libraries to compile - removing some of them will save space
|
||||||
# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed
|
# MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ index b728243..75a4bb4 100755
|
|||||||
-
|
-
|
||||||
+make -j8
|
+make -j8
|
||||||
diff --git a/src/control/controller.cpp b/src/control/controller.cpp
|
diff --git a/src/control/controller.cpp b/src/control/controller.cpp
|
||||||
index 49996e2..8b4d13c 100644
|
index 49996e2..6ad4ed8 100644
|
||||||
--- a/src/control/controller.cpp
|
--- a/src/control/controller.cpp
|
||||||
+++ b/src/control/controller.cpp
|
+++ b/src/control/controller.cpp
|
||||||
@@ -16,6 +16,9 @@
|
@@ -16,6 +16,9 @@
|
||||||
@@ -37,7 +37,16 @@ index 49996e2..8b4d13c 100644
|
|||||||
const char* Controller::controlNames[] = {
|
const char* Controller::controlNames[] = {
|
||||||
"left",
|
"left",
|
||||||
"right",
|
"right",
|
||||||
@@ -84,4 +87,23 @@ Controller::update()
|
@@ -51,6 +54,8 @@ Controller::reset()
|
||||||
|
controls[i] = false;
|
||||||
|
oldControls[i] = false;
|
||||||
|
}
|
||||||
|
+ mousePressed = false;
|
||||||
|
+ mousePos = Vector(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -84,4 +89,23 @@ Controller::update()
|
||||||
oldControls[i] = controls[i];
|
oldControls[i] = controls[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -533,10 +542,20 @@ index c7d7778..9949e92 100644
|
|||||||
try_vsync(true),
|
try_vsync(true),
|
||||||
show_fps(false),
|
show_fps(false),
|
||||||
diff --git a/src/supertux/main.cpp b/src/supertux/main.cpp
|
diff --git a/src/supertux/main.cpp b/src/supertux/main.cpp
|
||||||
index 1cfba9c..76a0ed9 100644
|
index 1cfba9c..f453266 100644
|
||||||
--- a/src/supertux/main.cpp
|
--- a/src/supertux/main.cpp
|
||||||
+++ b/src/supertux/main.cpp
|
+++ b/src/supertux/main.cpp
|
||||||
@@ -128,7 +128,7 @@ public:
|
@@ -20,6 +20,9 @@
|
||||||
|
#include <version.h>
|
||||||
|
|
||||||
|
#include <SDL_image.h>
|
||||||
|
+#include <sys/types.h>
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
#include <boost/format.hpp>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
|
#include <iostream>
|
||||||
|
@@ -128,7 +131,7 @@ public:
|
||||||
if (!PHYSFS_init(argv0))
|
if (!PHYSFS_init(argv0))
|
||||||
{
|
{
|
||||||
std::stringstream msg;
|
std::stringstream msg;
|
||||||
@@ -545,7 +564,7 @@ index 1cfba9c..76a0ed9 100644
|
|||||||
throw std::runtime_error(msg.str());
|
throw std::runtime_error(msg.str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -143,36 +143,9 @@ public:
|
@@ -143,36 +146,9 @@ public:
|
||||||
|
|
||||||
void find_datadir()
|
void find_datadir()
|
||||||
{
|
{
|
||||||
@@ -584,7 +603,7 @@ index 1cfba9c..76a0ed9 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +211,7 @@ class SDLSubsystem
|
@@ -238,7 +214,7 @@ class SDLSubsystem
|
||||||
public:
|
public:
|
||||||
SDLSubsystem()
|
SDLSubsystem()
|
||||||
{
|
{
|
||||||
@@ -593,7 +612,7 @@ index 1cfba9c..76a0ed9 100644
|
|||||||
{
|
{
|
||||||
std::stringstream msg;
|
std::stringstream msg;
|
||||||
msg << "Couldn't initialize SDL: " << SDL_GetError();
|
msg << "Couldn't initialize SDL: " << SDL_GetError();
|
||||||
@@ -257,7 +230,7 @@ public:
|
@@ -257,7 +233,7 @@ public:
|
||||||
void
|
void
|
||||||
Main::init_video()
|
Main::init_video()
|
||||||
{
|
{
|
||||||
@@ -602,7 +621,7 @@ index 1cfba9c..76a0ed9 100644
|
|||||||
|
|
||||||
const char* icon_fname = "images/engine/icons/supertux-256x256.png";
|
const char* icon_fname = "images/engine/icons/supertux-256x256.png";
|
||||||
SDL_Surface* icon = IMG_Load_RW(get_physfs_SDLRWops(icon_fname), true);
|
SDL_Surface* icon = IMG_Load_RW(get_physfs_SDLRWops(icon_fname), true);
|
||||||
@@ -267,7 +240,7 @@ Main::init_video()
|
@@ -267,7 +243,7 @@ Main::init_video()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -611,6 +630,21 @@ index 1cfba9c..76a0ed9 100644
|
|||||||
SDL_FreeSurface(icon);
|
SDL_FreeSurface(icon);
|
||||||
}
|
}
|
||||||
SDL_ShowCursor(0);
|
SDL_ShowCursor(0);
|
||||||
|
@@ -383,6 +359,14 @@ Main::run(int argc, char** argv)
|
||||||
|
{
|
||||||
|
CommandLineArguments args;
|
||||||
|
|
||||||
|
+ // Copy over old savegames
|
||||||
|
+ struct stat st;
|
||||||
|
+ if (stat(".supertux2/profile1", &st) != 0)
|
||||||
|
+ {
|
||||||
|
+ system("mkdir -p .supertux2/profile1");
|
||||||
|
+ system("cp $SDCARD/app-data/org.lethargik.supertux2/.supertux2/profile1/* .supertux2/profile1/");
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
try
|
||||||
|
{
|
||||||
|
args.parse_args(argc, argv);
|
||||||
diff --git a/src/supertux/menu/joystick_menu.cpp b/src/supertux/menu/joystick_menu.cpp
|
diff --git a/src/supertux/menu/joystick_menu.cpp b/src/supertux/menu/joystick_menu.cpp
|
||||||
index bd11c9a..a2970bf 100644
|
index bd11c9a..a2970bf 100644
|
||||||
--- a/src/supertux/menu/joystick_menu.cpp
|
--- a/src/supertux/menu/joystick_menu.cpp
|
||||||
@@ -884,7 +918,7 @@ index b5251e0..6248380 100644
|
|||||||
|
|
||||||
GLLightmap::~GLLightmap()
|
GLLightmap::~GLLightmap()
|
||||||
diff --git a/src/video/gl/gl_painter.cpp b/src/video/gl/gl_painter.cpp
|
diff --git a/src/video/gl/gl_painter.cpp b/src/video/gl/gl_painter.cpp
|
||||||
index ecb3cb1..a6ec13e 100644
|
index ecb3cb1..3493ee1 100644
|
||||||
--- a/src/video/gl/gl_painter.cpp
|
--- a/src/video/gl/gl_painter.cpp
|
||||||
+++ b/src/video/gl/gl_painter.cpp
|
+++ b/src/video/gl/gl_painter.cpp
|
||||||
@@ -14,6 +14,9 @@
|
@@ -14,6 +14,9 @@
|
||||||
@@ -897,7 +931,41 @@ index ecb3cb1..a6ec13e 100644
|
|||||||
#include "video/gl/gl_painter.hpp"
|
#include "video/gl/gl_painter.hpp"
|
||||||
|
|
||||||
#include "video/drawing_request.hpp"
|
#include "video/drawing_request.hpp"
|
||||||
@@ -125,8 +128,8 @@ GLPainter::draw_surface(const DrawingRequest& request)
|
@@ -21,6 +24,8 @@
|
||||||
|
#include "video/gl/gl_texture.hpp"
|
||||||
|
|
||||||
|
GLuint GLPainter::s_last_texture = static_cast<GLuint>(-1);
|
||||||
|
+GLenum GLPainter::s_blend_sfactor = -1;
|
||||||
|
+GLenum GLPainter::s_blend_dfactor = -1;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
@@ -38,7 +43,13 @@ inline void intern_draw(float left, float top, float right, float bottom,
|
||||||
|
if(effect & VERTICAL_FLIP)
|
||||||
|
std::swap(uv_top, uv_bottom);
|
||||||
|
|
||||||
|
- glBlendFunc(blend.sfactor, blend.dfactor);
|
||||||
|
+ bool restoreBlendMode = false;
|
||||||
|
+ if (blend.sfactor != GL_SRC_ALPHA || blend.dfactor != GL_ONE_MINUS_SRC_ALPHA) {
|
||||||
|
+ glBlendFunc(blend.sfactor, blend.dfactor);
|
||||||
|
+ restoreBlendMode = true;
|
||||||
|
+ //s_blend_sfactor = blend.sfactor;
|
||||||
|
+ //s_blend_dfactor = blend.dfactor;
|
||||||
|
+ }
|
||||||
|
glColor4f(color.red, color.green, color.blue, color.alpha * alpha);
|
||||||
|
|
||||||
|
// unrotated blit
|
||||||
|
@@ -95,7 +106,8 @@ inline void intern_draw(float left, float top, float right, float bottom,
|
||||||
|
|
||||||
|
// FIXME: find a better way to restore the blend mode
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
+ if (restoreBlendMode)
|
||||||
|
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
@@ -125,8 +137,8 @@ GLPainter::draw_surface(const DrawingRequest& request)
|
||||||
glBindTexture(GL_TEXTURE_2D, th);
|
glBindTexture(GL_TEXTURE_2D, th);
|
||||||
}
|
}
|
||||||
intern_draw(request.pos.x, request.pos.y,
|
intern_draw(request.pos.x, request.pos.y,
|
||||||
@@ -908,18 +976,20 @@ index ecb3cb1..a6ec13e 100644
|
|||||||
surface_data->get_uv_left(),
|
surface_data->get_uv_left(),
|
||||||
surface_data->get_uv_top(),
|
surface_data->get_uv_top(),
|
||||||
surface_data->get_uv_right(),
|
surface_data->get_uv_right(),
|
||||||
@@ -371,4 +374,9 @@ GLPainter::draw_inverse_ellipse(const DrawingRequest& request)
|
@@ -371,4 +383,11 @@ GLPainter::draw_inverse_ellipse(const DrawingRequest& request)
|
||||||
glColor4f(1, 1, 1, 1);
|
glColor4f(1, 1, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
+void GLPainter::reset_last_texture()
|
+void GLPainter::reset_last_texture()
|
||||||
+{
|
+{
|
||||||
+ s_last_texture = 0;
|
+ s_last_texture = static_cast<GLuint>(-1);
|
||||||
|
+ s_blend_sfactor = -1;
|
||||||
|
+ s_blend_dfactor = -1;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* EOF */
|
/* EOF */
|
||||||
diff --git a/src/video/gl/gl_painter.hpp b/src/video/gl/gl_painter.hpp
|
diff --git a/src/video/gl/gl_painter.hpp b/src/video/gl/gl_painter.hpp
|
||||||
index bb3dd75..54e2c41 100644
|
index bb3dd75..6ac8add 100644
|
||||||
--- a/src/video/gl/gl_painter.hpp
|
--- a/src/video/gl/gl_painter.hpp
|
||||||
+++ b/src/video/gl/gl_painter.hpp
|
+++ b/src/video/gl/gl_painter.hpp
|
||||||
@@ -17,13 +17,18 @@
|
@@ -17,13 +17,18 @@
|
||||||
@@ -942,7 +1012,16 @@ index bb3dd75..54e2c41 100644
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct DrawingRequest;
|
struct DrawingRequest;
|
||||||
@@ -41,6 +46,7 @@ public:
|
@@ -32,6 +37,8 @@ class GLPainter
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static GLuint s_last_texture;
|
||||||
|
+ static GLenum s_blend_sfactor;
|
||||||
|
+ static GLenum s_blend_dfactor;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GLPainter();
|
||||||
|
@@ -41,6 +48,7 @@ public:
|
||||||
static void draw_gradient(const DrawingRequest& request);
|
static void draw_gradient(const DrawingRequest& request);
|
||||||
static void draw_filled_rect(const DrawingRequest& request);
|
static void draw_filled_rect(const DrawingRequest& request);
|
||||||
static void draw_inverse_ellipse(const DrawingRequest& request);
|
static void draw_inverse_ellipse(const DrawingRequest& request);
|
||||||
@@ -951,7 +1030,7 @@ index bb3dd75..54e2c41 100644
|
|||||||
private:
|
private:
|
||||||
GLPainter(const GLPainter&) = delete;
|
GLPainter(const GLPainter&) = delete;
|
||||||
diff --git a/src/video/gl/gl_renderer.cpp b/src/video/gl/gl_renderer.cpp
|
diff --git a/src/video/gl/gl_renderer.cpp b/src/video/gl/gl_renderer.cpp
|
||||||
index 8f4a18ee..072e99e 100644
|
index 8f4a18ee..aa5670a 100644
|
||||||
--- a/src/video/gl/gl_renderer.cpp
|
--- a/src/video/gl/gl_renderer.cpp
|
||||||
+++ b/src/video/gl/gl_renderer.cpp
|
+++ b/src/video/gl/gl_renderer.cpp
|
||||||
@@ -43,35 +43,13 @@
|
@@ -43,35 +43,13 @@
|
||||||
@@ -1172,11 +1251,11 @@ index 8f4a18ee..072e99e 100644
|
|||||||
+ //SCREEN_WIDTH = SDL_GetVideoInfo()->current_w;
|
+ //SCREEN_WIDTH = SDL_GetVideoInfo()->current_w;
|
||||||
+ //SCREEN_HEIGHT = SDL_GetVideoInfo()->current_h;
|
+ //SCREEN_HEIGHT = SDL_GetVideoInfo()->current_h;
|
||||||
+#ifdef ANDROID
|
+#ifdef ANDROID
|
||||||
+ SDL_SetVideoMode(m_desktop_size.width, m_desktop_size.height, 24, SDL_OPENGL | SDL_DOUBLEBUF | SDL_FULLSCREEN);
|
+ SDL_SetVideoMode(m_desktop_size.width, m_desktop_size.height, 16, SDL_OPENGL | SDL_DOUBLEBUF | SDL_FULLSCREEN);
|
||||||
+#else
|
+#else
|
||||||
+ m_desktop_size.width = 1280;
|
+ m_desktop_size.width = 1280;
|
||||||
+ m_desktop_size.height = 800;
|
+ m_desktop_size.height = 800;
|
||||||
+ SDL_SetVideoMode(m_desktop_size.width, m_desktop_size.height, 24, SDL_OPENGL | SDL_DOUBLEBUF);
|
+ SDL_SetVideoMode(m_desktop_size.width, m_desktop_size.height, 16, SDL_OPENGL | SDL_DOUBLEBUF);
|
||||||
+#endif
|
+#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1219,7 +1298,7 @@ index 5da04a8..b73eb9d 100644
|
|||||||
private:
|
private:
|
||||||
void apply_video_mode();
|
void apply_video_mode();
|
||||||
diff --git a/src/video/gl/gl_texture.cpp b/src/video/gl/gl_texture.cpp
|
diff --git a/src/video/gl/gl_texture.cpp b/src/video/gl/gl_texture.cpp
|
||||||
index 443fa01..20fede8 100644
|
index 443fa01..89c9f5e 100644
|
||||||
--- a/src/video/gl/gl_texture.cpp
|
--- a/src/video/gl/gl_texture.cpp
|
||||||
+++ b/src/video/gl/gl_texture.cpp
|
+++ b/src/video/gl/gl_texture.cpp
|
||||||
@@ -16,6 +16,8 @@
|
@@ -16,6 +16,8 @@
|
||||||
@@ -1273,21 +1352,38 @@ index 443fa01..20fede8 100644
|
|||||||
{
|
{
|
||||||
#ifdef GL_VERSION_ES_CM_1_0
|
#ifdef GL_VERSION_ES_CM_1_0
|
||||||
m_texture_width = next_power_of_two(image->w);
|
m_texture_width = next_power_of_two(image->w);
|
||||||
@@ -109,11 +103,11 @@ GLTexture::GLTexture(SDL_Surface* image) :
|
@@ -107,80 +101,93 @@ GLTexture::GLTexture(SDL_Surface* image) :
|
||||||
|
m_image_width = image->w;
|
||||||
|
m_image_height = image->h;
|
||||||
|
|
||||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
||||||
SDL_Surface* convert = SDL_CreateRGBSurface(0,
|
- SDL_Surface* convert = SDL_CreateRGBSurface(0,
|
||||||
- m_texture_width, m_texture_height, 32,
|
- m_texture_width, m_texture_height, 32,
|
||||||
+ m_image_width, m_image_height, 32,
|
- 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
|
||||||
0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
|
-#else
|
||||||
#else
|
- SDL_Surface* convert = SDL_CreateRGBSurface(0,
|
||||||
SDL_Surface* convert = SDL_CreateRGBSurface(0,
|
|
||||||
- m_texture_width, m_texture_height, 32,
|
- m_texture_width, m_texture_height, 32,
|
||||||
+ m_image_width, m_image_height, 32,
|
- 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
|
||||||
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
|
-#endif
|
||||||
#endif
|
+ SDL_Surface* convert;
|
||||||
|
+ if (image->flags & SDL_SRCCOLORKEY) {
|
||||||
|
+ // Palette image with colorkey transparency - RGBA5551
|
||||||
|
+ convert = SDL_CreateRGBSurface(0,
|
||||||
|
+ m_image_width, m_image_height, 16,
|
||||||
|
+ 0x0000f800, 0x000007c0, 0x0000003e, 0x00000001);
|
||||||
|
+ } else if (image->format->BitsPerPixel == 32) {
|
||||||
|
+ // 32-bit image with alpha channel - RGBA4444
|
||||||
|
+ convert = SDL_CreateRGBSurface(0,
|
||||||
|
+ m_image_width, m_image_height, 16,
|
||||||
|
+ 0x0000f000, 0x00000f00, 0x000000f0, 0x0000000f);
|
||||||
|
+ } else {
|
||||||
|
+ // 24-bit image or palette without transparency - RGB565
|
||||||
|
+ convert = SDL_CreateRGBSurface(0,
|
||||||
|
+ m_image_width, m_image_height, 16,
|
||||||
|
+ 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000);
|
||||||
|
+ }
|
||||||
|
|
||||||
@@ -121,66 +115,60 @@ GLTexture::GLTexture(SDL_Surface* image) :
|
if(convert == 0) {
|
||||||
throw std::runtime_error("Couldn't create texture: out of memory");
|
throw std::runtime_error("Couldn't create texture: out of memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1303,17 +1399,17 @@ index 443fa01..20fede8 100644
|
|||||||
+
|
+
|
||||||
+ reupload();
|
+ reupload();
|
||||||
+ TextureManager::current()->register_texture(this);
|
+ TextureManager::current()->register_texture(this);
|
||||||
+
|
|
||||||
+ assert_gl("creating texture");
|
+ assert_gl("creating texture");
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
+void GLTexture::reupload()
|
+void GLTexture::reupload()
|
||||||
+{
|
+{
|
||||||
assert_gl("before creating texture");
|
assert_gl("before creating texture");
|
||||||
glGenTextures(1, &m_handle);
|
glGenTextures(1, &m_handle);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
GLenum sdl_format;
|
- GLenum sdl_format;
|
||||||
- if(convert->format->BytesPerPixel == 3)
|
- if(convert->format->BytesPerPixel == 3)
|
||||||
- sdl_format = GL_RGB;
|
- sdl_format = GL_RGB;
|
||||||
- else if(convert->format->BytesPerPixel == 4)
|
- else if(convert->format->BytesPerPixel == 4)
|
||||||
@@ -1321,8 +1417,19 @@ index 443fa01..20fede8 100644
|
|||||||
- else {
|
- else {
|
||||||
- sdl_format = GL_RGBA;
|
- sdl_format = GL_RGBA;
|
||||||
- assert(false);
|
- assert(false);
|
||||||
- }
|
+ GLenum sdl_format = GL_RGBA;
|
||||||
+ sdl_format = GL_RGBA;
|
+ GLenum pixel_packing = GL_UNSIGNED_BYTE;
|
||||||
|
+
|
||||||
|
+ if (m_pixels) {
|
||||||
|
+ if (m_pixels->format->Amask == 0)
|
||||||
|
+ sdl_format = GL_RGB;
|
||||||
|
+ if (m_pixels->format->Gmask == 0x000007c0)
|
||||||
|
+ pixel_packing = GL_UNSIGNED_SHORT_5_5_5_1;
|
||||||
|
+ if (m_pixels->format->Gmask == 0x00000f00)
|
||||||
|
+ pixel_packing = GL_UNSIGNED_SHORT_4_4_4_4;
|
||||||
|
+ if (m_pixels->format->Gmask == 0x000007e0)
|
||||||
|
+ pixel_packing = GL_UNSIGNED_SHORT_5_6_5;
|
||||||
|
}
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, m_handle);
|
glBindTexture(GL_TEXTURE_2D, m_handle);
|
||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
@@ -1356,12 +1463,12 @@ index 443fa01..20fede8 100644
|
|||||||
- {
|
- {
|
||||||
- SDL_UnlockSurface(convert);
|
- SDL_UnlockSurface(convert);
|
||||||
- }
|
- }
|
||||||
+ GL_UNSIGNED_BYTE, NULL);
|
+ pixel_packing, NULL);
|
||||||
|
|
||||||
- assert_gl("creating texture");
|
- assert_gl("creating texture");
|
||||||
+ if (m_pixels)
|
+ if (m_pixels)
|
||||||
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_image_width, m_image_height,
|
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_image_width, m_image_height,
|
||||||
+ sdl_format, GL_UNSIGNED_BYTE, m_pixels->pixels);
|
+ sdl_format, pixel_packing, m_pixels->pixels);
|
||||||
|
|
||||||
set_texture_params();
|
set_texture_params();
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|||||||
Reference in New Issue
Block a user