Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -28,9 +28,11 @@
|
||||
<set name="NATIVE_TOOLKIT_CURL_SSL" value="1" />
|
||||
<set name="NATIVE_TOOLKIT_SDL_STATIC" value="1" />
|
||||
|
||||
<set name="NATIVE_TOOLKIT_SDL_ANGLE" value="1" if="LIME_SDL_ANGLE" />
|
||||
|
||||
|
||||
<files id="lime">
|
||||
|
||||
<compilerflag value="-DLIME_SDL" if="LIME_SDL" />
|
||||
<compilerflag value="-Iinclude" />
|
||||
|
||||
<file name="src/ExternalInterface.cpp" />
|
||||
@@ -141,6 +143,7 @@
|
||||
</section>
|
||||
|
||||
<compilerflag value="-DLIME_SDL" />
|
||||
<compilerflag value="-DNATIVE_TOOLKIT_SDL_ANGLE" if="NATIVE_TOOLKIT_SDL_ANGLE" />
|
||||
<compilerflag value="-D__IPHONEOS__" if="ios" />
|
||||
|
||||
<file name="src/backend/sdl/SDLApplication.cpp" />
|
||||
|
||||
@@ -26,6 +26,7 @@ namespace lime {
|
||||
ByteArray *data;
|
||||
int height;
|
||||
int width;
|
||||
bool transparent;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ namespace lime {
|
||||
WINDOW_ACTIVATE,
|
||||
WINDOW_CLOSE,
|
||||
WINDOW_DEACTIVATE,
|
||||
WINDOW_ENTER,
|
||||
WINDOW_FOCUS_IN,
|
||||
WINDOW_FOCUS_OUT,
|
||||
WINDOW_LEAVE,
|
||||
WINDOW_MINIMIZE,
|
||||
WINDOW_MOVE,
|
||||
WINDOW_RESIZE,
|
||||
WINDOW_RESTORE
|
||||
WINDOW_RESTORE,
|
||||
|
||||
};
|
||||
|
||||
|
||||
Submodule project/lib/sdl updated: 47e23f2659...c40b7c2e07
@@ -120,10 +120,16 @@ namespace lime {
|
||||
|
||||
if (file->isFile ()) {
|
||||
|
||||
ov_open (file->getFile (), &oggFile, NULL, file->getLength ());
|
||||
if (ov_open (file->getFile (), &oggFile, NULL, file->getLength ()) != 0) {
|
||||
|
||||
lime::fclose (file);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
lime::fclose (file);
|
||||
ByteArray data = ByteArray (resource->path);
|
||||
|
||||
OAL_OggMemoryFile fakeFile = { data.Bytes (), data.Size (), 0 };
|
||||
@@ -166,6 +172,7 @@ namespace lime {
|
||||
if (pInfo == NULL) {
|
||||
|
||||
//LOG_SOUND("FAILED TO READ OGG SOUND INFO, IS THIS EVEN AN OGG FILE?\n");
|
||||
ov_clear (&oggFile);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ namespace lime {
|
||||
if ((riff_header.chunkID[0] != 'R' || riff_header.chunkID[1] != 'I' || riff_header.chunkID[2] != 'F' || riff_header.chunkID[3] != 'F') || (riff_header.format[0] != 'W' || riff_header.format[1] != 'A' || riff_header.format[2] != 'V' || riff_header.format[3] != 'E')) {
|
||||
|
||||
//LOG_SOUND ("Invalid RIFF or WAVE Header!\n");
|
||||
lime::fclose (file);
|
||||
return false;
|
||||
|
||||
}
|
||||
@@ -88,13 +89,14 @@ namespace lime {
|
||||
if (result != 1) {
|
||||
|
||||
LOG_SOUND ("Invalid Wave Format!\n");
|
||||
lime::fclose (file);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if (wave_format.subChunkID[0] != 'f' || wave_format.subChunkID[1] != 'm' || wave_format.subChunkID[2] != 't' || wave_format.subChunkID[3] != ' ') {
|
||||
|
||||
lime::fseek (file, wave_data.subChunkSize, SEEK_CUR);
|
||||
lime::fseek (file, wave_format.subChunkSize, SEEK_CUR);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -104,11 +106,11 @@ namespace lime {
|
||||
|
||||
}
|
||||
|
||||
if (wave_format.subChunkSize > 16) {
|
||||
|
||||
lime::fseek (file, sizeof (short), SEEK_CUR);
|
||||
|
||||
}
|
||||
//if (wave_format.subChunkSize > 16) {
|
||||
//
|
||||
//lime::fseek (file, sizeof (short), SEEK_CUR);
|
||||
//
|
||||
//}
|
||||
|
||||
bool foundData = false;
|
||||
|
||||
@@ -120,6 +122,7 @@ namespace lime {
|
||||
if (result != 1) {
|
||||
|
||||
LOG_SOUND ("Invalid Wav Data Header!\n");
|
||||
lime::fclose (file);
|
||||
return false;
|
||||
|
||||
}
|
||||
@@ -141,6 +144,7 @@ namespace lime {
|
||||
if (!lime::fread (audioBuffer->data->Bytes (), wave_data.subChunkSize, 1, file)) {
|
||||
|
||||
LOG_SOUND ("error loading WAVE data into struct!\n");
|
||||
lime::fclose (file);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
@@ -149,6 +149,8 @@ namespace lime {
|
||||
|
||||
switch (event->window.event) {
|
||||
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
@@ -351,8 +353,10 @@ namespace lime {
|
||||
case SDL_WINDOWEVENT_SHOWN: windowEvent.type = WINDOW_ACTIVATE; break;
|
||||
case SDL_WINDOWEVENT_CLOSE: windowEvent.type = WINDOW_CLOSE; break;
|
||||
case SDL_WINDOWEVENT_HIDDEN: windowEvent.type = WINDOW_DEACTIVATE; break;
|
||||
case SDL_WINDOWEVENT_ENTER: windowEvent.type = WINDOW_ENTER; break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED: windowEvent.type = WINDOW_FOCUS_IN; break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST: windowEvent.type = WINDOW_FOCUS_OUT; break;
|
||||
case SDL_WINDOWEVENT_LEAVE: windowEvent.type = WINDOW_LEAVE; break;
|
||||
case SDL_WINDOWEVENT_MINIMIZED: windowEvent.type = WINDOW_MINIMIZE; break;
|
||||
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
|
||||
@@ -22,6 +22,15 @@ namespace lime {
|
||||
if (flags & WINDOW_FLAG_RESIZABLE) sdlFlags |= SDL_WINDOW_RESIZABLE;
|
||||
if (flags & WINDOW_FLAG_BORDERLESS) sdlFlags |= SDL_WINDOW_BORDERLESS;
|
||||
|
||||
#if defined (HX_WINDOWS) && defined (NATIVE_TOOLKIT_SDL_ANGLE)
|
||||
|
||||
SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
||||
SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2);
|
||||
SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||
SDL_SetHint (SDL_HINT_VIDEO_WIN_D3DCOMPILER, "d3dcompiler_47.dll");
|
||||
|
||||
#endif
|
||||
|
||||
if (flags & WINDOW_FLAG_DEPTH_BUFFER) {
|
||||
|
||||
SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 32 - (flags & WINDOW_FLAG_STENCIL_BUFFER) ? 8 : 0);
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace lime {
|
||||
buffer = new ImageBuffer (val_field (image, id_buffer));
|
||||
offsetX = val_int (val_field (image, id_offsetX));
|
||||
offsetY = val_int (val_field (image, id_offsetY));
|
||||
transparent = val_int (val_field (image, id_transparent));
|
||||
transparent = val_bool (val_field (image, id_transparent));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace lime {
|
||||
static int id_data;
|
||||
static int id_height;
|
||||
static int id_width;
|
||||
static int id_transparent;
|
||||
static bool init = false;
|
||||
|
||||
|
||||
@@ -19,6 +20,7 @@ namespace lime {
|
||||
height = 0;
|
||||
bpp = 4;
|
||||
data = 0;
|
||||
transparent = false;
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +31,7 @@ namespace lime {
|
||||
|
||||
id_bpp = val_id ("bpp");
|
||||
id_bitsPerPixel = val_id ("bitsPerPixel");
|
||||
id_transparent = val_id ("transparent");
|
||||
id_buffer = val_id ("buffer");
|
||||
id_width = val_id ("width");
|
||||
id_height = val_id ("height");
|
||||
@@ -40,6 +43,7 @@ namespace lime {
|
||||
width = val_int (val_field (imageBuffer, id_width));
|
||||
height = val_int (val_field (imageBuffer, id_height));
|
||||
bpp = val_int (val_field (imageBuffer, id_bitsPerPixel));
|
||||
transparent = val_bool (val_field (imageBuffer, id_transparent));
|
||||
value data_value = val_field (imageBuffer, id_data);
|
||||
value buffer_value = val_field (data_value, id_buffer);
|
||||
|
||||
@@ -94,6 +98,7 @@ namespace lime {
|
||||
|
||||
id_bpp = val_id ("bpp");
|
||||
id_bitsPerPixel = val_id ("bitsPerPixel");
|
||||
id_transparent = val_id ("transparent");
|
||||
id_buffer = val_id ("buffer");
|
||||
id_width = val_id ("width");
|
||||
id_height = val_id ("height");
|
||||
@@ -106,6 +111,7 @@ namespace lime {
|
||||
alloc_field (mValue, id_width, alloc_int (width));
|
||||
alloc_field (mValue, id_height, alloc_int (height));
|
||||
alloc_field (mValue, id_bpp, alloc_int (bpp));
|
||||
alloc_field (mValue, id_transparent, alloc_bool (transparent));
|
||||
alloc_field (mValue, id_data, data->mValue);
|
||||
return mValue;
|
||||
|
||||
|
||||
@@ -201,6 +201,8 @@ namespace lime {
|
||||
png_read_end (png_ptr, NULL);
|
||||
png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||
|
||||
if (file) lime::fclose (file);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
#include <gl/GL.h>
|
||||
typedef ptrdiff_t GLsizeiptrARB;
|
||||
#define NEED_EXTENSIONS
|
||||
#define DYNAMIC_OGL
|
||||
#include <SDL_opengl.h>
|
||||
#include <SDL_opengl_glext.h>
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@
|
||||
|
||||
#include "OpenGLBindings.h"
|
||||
|
||||
#ifdef LIME_SDL
|
||||
#include <SDL.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef DECLARE_EXTENSION
|
||||
|
||||
@@ -27,7 +31,14 @@
|
||||
|
||||
#elif defined(GET_EXTENSION)
|
||||
|
||||
#ifdef HX_WINDOWS
|
||||
#ifdef LIME_SDL
|
||||
#define OGL_EXT(func,ret,args) \
|
||||
{\
|
||||
*(void **)&lime::func = (void *)SDL_GL_GetProcAddress(#func);\
|
||||
if (!func) \
|
||||
*(void **)&lime::func = (void *)SDL_GL_GetProcAddress(#func "ARB");\
|
||||
}
|
||||
#elif HX_WINDOWS
|
||||
#define OGL_EXT(func,ret,args) \
|
||||
{\
|
||||
*(void **)&lime::func = (void *)wglGetProcAddress(#func);\
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace lime {
|
||||
int rows = sourceRect->y + sourceRect->height + sourceImage->offsetY;
|
||||
int columns = sourceRect->x + sourceRect->width + sourceImage->offsetX;
|
||||
|
||||
if (!mergeAlpha || !sourceImage->transparent) {
|
||||
if (!mergeAlpha || !sourceImage->buffer->transparent) {
|
||||
|
||||
for (int row = sourceRect->y + sourceImage->offsetY; row < rows; row++) {
|
||||
|
||||
@@ -162,6 +162,8 @@ namespace lime {
|
||||
} else {
|
||||
|
||||
float sourceAlpha;
|
||||
float destAlpha;
|
||||
float outA;
|
||||
float oneMinusSourceAlpha;
|
||||
|
||||
for (int row = sourceRect->y + sourceImage->offsetY; row < rows; row++) {
|
||||
@@ -171,13 +173,15 @@ namespace lime {
|
||||
sourceOffset = (row * sourceStride) + (column * 4);
|
||||
offset = ((row + rowOffset) * stride) + ((column + columnOffset) * 4);
|
||||
|
||||
sourceAlpha = sourceData[sourceOffset + 3] / 255;
|
||||
sourceAlpha = sourceData[sourceOffset + 3] / 255.0;
|
||||
destAlpha = data[offset + 3] / 255.0;
|
||||
oneMinusSourceAlpha = (1 - sourceAlpha);
|
||||
|
||||
data[offset] = __clamp[int (sourceData[sourceOffset] + (data[offset] * oneMinusSourceAlpha))];
|
||||
data[offset + 1] = __clamp[int (sourceData[sourceOffset + 1] + (data[offset + 1] * oneMinusSourceAlpha))];
|
||||
data[offset + 2] = __clamp[int (sourceData[sourceOffset + 2] + (data[offset + 2] * oneMinusSourceAlpha))];
|
||||
data[offset + 3] = __clamp[int (sourceData[sourceOffset + 3] + (data[offset + 3] * oneMinusSourceAlpha))];
|
||||
outA = sourceAlpha + destAlpha * oneMinusSourceAlpha;
|
||||
data[offset + 0] = __clamp[int (0.5 + ((sourceData[sourceOffset + 0] * sourceAlpha + data[offset + 0] * destAlpha * oneMinusSourceAlpha) / outA))];
|
||||
data[offset + 1] = __clamp[int (0.5 + ((sourceData[sourceOffset + 1] * sourceAlpha + data[offset + 1] * destAlpha * oneMinusSourceAlpha) / outA))];
|
||||
data[offset + 2] = __clamp[int (0.5 + ((sourceData[sourceOffset + 2] * sourceAlpha + data[offset + 2] * destAlpha * oneMinusSourceAlpha) / outA))];
|
||||
data[offset + 3] = __clamp[int (0.5 + (outA * 255.0))];
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ namespace lime {
|
||||
WindowEvent::WindowEvent () {
|
||||
|
||||
type = WINDOW_ACTIVATE;
|
||||
|
||||
width = 0;
|
||||
height = 0;
|
||||
x = 0;
|
||||
|
||||
Reference in New Issue
Block a user