1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-15 09:34:18 +02:00

remove API-specific code from Core

This commit is contained in:
XProger
2018-04-24 04:48:20 +03:00
parent 67af3b870f
commit 0f6735640a
7 changed files with 248 additions and 235 deletions

View File

@@ -11,16 +11,11 @@
#define OS_PTHREAD_MT
#ifdef WIN32
#define _OS_WINDOWS
#define _OS_WIN
#define _GAPI_GL
//#define _GAPI_VULKAN
#include <windows.h>
#ifdef _GAPI_GL
#include <gl/GL.h>
#include <gl/glext.h>
#endif
#undef OS_PTHREAD_MT
#elif ANDROID
@@ -29,89 +24,16 @@
#define _GAPI_GLES
//#define _GAPI_VULKAN
#include <dlfcn.h>
#ifdef _GAPI_GL
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_RGBA16F 0x881A
#define GL_RGBA32F 0x8814
#define GL_HALF_FLOAT 0x140B
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
#define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC
#define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC
#define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC
#define glGenVertexArrays glGenVertexArraysOES
#define glDeleteVertexArrays glDeleteVertexArraysOES
#define glBindVertexArray glBindVertexArrayOES
#define PFNGLGETPROGRAMBINARYPROC PFNGLGETPROGRAMBINARYOESPROC
#define PFNGLPROGRAMBINARYPROC PFNGLPROGRAMBINARYOESPROC
#define glGetProgramBinary glGetProgramBinaryOES
#define glProgramBinary glProgramBinaryOES
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#endif
extern void osToggleVR(bool enable);
#elif __RPI__
#define _OS_RPI
#define _GAPI_GL
#define _GAPI_GLES
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#undef GL_RGBA32F
#undef GL_RGBA16F
#undef GL_HALF_FLOAT
#define GL_RGBA32F GL_RGBA
#define GL_RGBA16F GL_RGBA
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
#define glGenVertexArrays(...)
#define glDeleteVertexArrays(...)
#define glBindVertexArray(...)
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#define glGetProgramBinary(...)
#define glProgramBinary(...)
extern EGLDisplay display;
#define DYNGEOM_NO_VBO
#elif __linux__
#define _OS_LINUX
#define _GAPI_GL
#ifdef _GAPI_GL
#include <GL/gl.h>
#include <GL/glext.h>
#include <GL/glx.h>
#endif
#elif __APPLE__
#define _GAPI_GL
#include "TargetConditionals.h"
@@ -119,73 +41,18 @@
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
#define _OS_IOS
#define _GAPI_GLES
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
#include <OpenGLES/ES3/glext.h>
#define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC
#define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC
#define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC
#define glGenVertexArrays glGenVertexArraysOES
#define glDeleteVertexArrays glDeleteVertexArraysOES
#define glBindVertexArray glBindVertexArrayOES
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE GL_TEXTURE_COMPARE_MODE_EXT
#define GL_TEXTURE_COMPARE_FUNC GL_TEXTURE_COMPARE_FUNC_EXT
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_REF_TO_TEXTURE_EXT
#else
#define _OS_MACOS
#include <Carbon/Carbon.h>
#include <AudioToolbox/AudioQueue.h>
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
#include <OpenGL/glext.h>
#include <AGL/agl.h>
#define GL_RGBA16F 0x881A
#define GL_RGBA32F 0x8814
#define GL_HALF_FLOAT 0x140B
#define GL_RGB565 GL_RGBA
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define glGenVertexArrays glGenVertexArraysAPPLE
#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
#define glBindVertexArray glBindVertexArrayAPPLE
#define GL_PROGRAM_BINARY_LENGTH 0
#define glGetProgramBinary(...) 0
#define glProgramBinary(...) 0
#define _OS_MAC
#endif
#elif __EMSCRIPTEN__
#define _OS_WEB
#define _GAPI_GL
#define _GAPI_GLES
#include <emscripten/emscripten.h>
#include <emscripten/html5.h>
#include <GLES3/gl3.h>
#include <GLES3/gl2ext.h>
#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_BORDER_EXT
#define GL_TEXTURE_BORDER_COLOR GL_TEXTURE_BORDER_COLOR_EXT
#define glGetProgramBinary(...)
#define glProgramBinary(...)
#undef OS_FILEIO_CACHE
#elif _PSP
#define _OS_PSP
#define _GAPI_SCEGU
#include <pspgu.h>
#include <pspgum.h>
#define FFP
#define TEX_SWIZZLE
@@ -434,8 +301,6 @@ namespace Core {
#include "input.h"
#include "sound.h"
#define MAX_LIGHTS 4
#define MAX_RENDER_BUFFERS 32
#define MAX_CONTACTS 15
@@ -518,20 +383,6 @@ namespace Core {
enum Pass { passCompose, passShadow, passAmbient, passWater, passFilter, passGUI, passMAX } pass;
#ifdef _OS_PSP
void *curBackBuffer;
#else
GLuint FBO, defaultFBO;
struct RenderTargetCache {
int count;
struct Item {
GLuint ID;
int width;
int height;
} items[MAX_RENDER_BUFFERS];
} rtCache[2];
#endif
Texture *defaultTarget;
int32 renderState;
@@ -547,13 +398,14 @@ namespace Core {
uint32 targetOp;
vec4 viewport;
vec4 material;
#ifdef _OS_PSP
Index *iBuffer;
#ifdef _GAPI_GL
uint32 VAO;
uint32 iBuffer;
uint32 vBuffer;
#elif _GAPI_SCEGU
Index *iBuffer;
GAPI::Vertex *vBuffer;
#else
GLuint VAO;
GLuint iBuffer;
GLuint vBuffer;
#endif
int32 basisCount;
@@ -610,6 +462,7 @@ namespace Core {
void init() {
x = y = 0;
#ifdef USE_INFLATE
tinf_init();
#endif
@@ -639,7 +492,6 @@ namespace Core {
LOG("\n");
defaultTarget = NULL;
memset(rtCache, 0, sizeof(rtCache));
for (int i = 0; i < MAX_LIGHTS; i++) {
lightPos[i] = vec3(0.0);
@@ -715,7 +567,7 @@ namespace Core {
}
// use S key for action on Mac because Ctrl + Left/Right used by system (default)
#ifdef _OS_MACOS
#ifdef _OS_MAC
settings.controls[0].keys[ cAction ].key = ikS;
#endif
@@ -766,28 +618,6 @@ namespace Core {
GAPI::waitVBlank();
}
#ifndef _OS_PSP
int cacheRenderTarget(bool depth, int width, int height) {
RenderTargetCache &cache = rtCache[depth];
for (int i = 0; i < cache.count; i++)
if (cache.items[i].width == width && cache.items[i].height == height)
return i;
ASSERT(cache.count < MAX_RENDER_BUFFERS);
RenderTargetCache::Item &item = cache.items[cache.count];
item.width = width;
item.height = height;
glGenRenderbuffers(1, &item.ID);
glBindRenderbuffer(GL_RENDERBUFFER, item.ID);
glRenderbufferStorage(GL_RENDERBUFFER, depth ? GL_RGB565 : GL_DEPTH_COMPONENT16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
return cache.count++;
}
#endif
bool update() {
resetState = false;
int time = getTime();
@@ -809,34 +639,11 @@ namespace Core {
uint32 face = reqTarget.face;
if (target != active.target || face != active.targetFace) {
#ifdef _OS_PSP
/*
if (!target)
sceGuDrawBufferList(GU_PSM_5650, curBackBuffer, 512);
else
sceGuDrawBufferList(GU_PSM_5650, target->offset, target->width);
*/
#else
bool depth = false;
Core::stats.rt++;
if (!target) { // may be a null
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
} else {
GLenum texTarget = GL_TEXTURE_2D;
if (target->opt & Texture::CUBEMAP)
texTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
depth = target->format == FMT_DEPTH || target->format == FMT_SHADOW;
int rtIndex = cacheRenderTarget(depth, target->width, target->height);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
glFramebufferTexture2D (GL_FRAMEBUFFER, depth ? GL_DEPTH_ATTACHMENT : GL_COLOR_ATTACHMENT0, texTarget, target->ID, 0);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, depth ? GL_COLOR_ATTACHMENT0 : GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rtCache[depth].items[rtIndex].ID);
}
#endif
GAPI::bindTarget(target, face);
bool depth = target && (target->format == FMT_DEPTH || target->format == FMT_SHADOW);
if (support.discardFrame) {
if (!(reqTarget.op & RT_LOAD_COLOR) && !depth) reqTarget.op |= RT_CLEAR_COLOR;
if (!(reqTarget.op & RT_LOAD_DEPTH) && depth) reqTarget.op |= RT_CLEAR_DEPTH;
@@ -976,11 +783,7 @@ namespace Core {
void copyTarget(Texture *dst, int xOffset, int yOffset, int x, int y, int width, int height) {
validateRenderState();
// GAPI::copyTarget(dst, xOffset, yOffset, x, y, width, height); TODO
dst->bind(sDiffuse);
#ifdef _GAPI_GL
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, x, y, width, height); // TODO: too bad for iOS devices!
#endif
GAPI::copyTarget(dst, xOffset, yOffset, x, y, width, height);
}
vec4 copyPixel(int x, int y) { // GPU sync!

View File

@@ -11,7 +11,7 @@ namespace Debug {
static GLuint font;
void init() {
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
font = glGenLists(256);
HDC hdc = GetDC(0);
HFONT hfont = CreateFontA(-MulDiv(10, GetDeviceCaps(hdc, LOGPIXELSY), 72), 0,

View File

@@ -3,13 +3,142 @@
#include "core.h"
#if defined(_OS_WINDOWS) || (defined(_OS_LINUX) && !defined(_OS_RPI)) || defined(_OS_ANDROID)
#ifdef _OS_WIN
#include <gl/GL.h>
#include <gl/glext.h>
#elif _OS_ANDROID
#include <dlfcn.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_RGBA16F 0x881A
#define GL_RGBA32F 0x8814
#define GL_HALF_FLOAT 0x140B
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
#define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC
#define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC
#define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC
#define glGenVertexArrays glGenVertexArraysOES
#define glDeleteVertexArrays glDeleteVertexArraysOES
#define glBindVertexArray glBindVertexArrayOES
#define PFNGLGETPROGRAMBINARYPROC PFNGLGETPROGRAMBINARYOESPROC
#define PFNGLPROGRAMBINARYPROC PFNGLPROGRAMBINARYOESPROC
#define glGetProgramBinary glGetProgramBinaryOES
#define glProgramBinary glProgramBinaryOES
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#elif _OS_RPI
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#undef GL_RGBA32F
#undef GL_RGBA16F
#undef GL_HALF_FLOAT
#define GL_RGBA32F GL_RGBA
#define GL_RGBA16F GL_RGBA
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
#define glGenVertexArrays(...)
#define glDeleteVertexArrays(...)
#define glBindVertexArray(...)
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#define glGetProgramBinary(...)
#define glProgramBinary(...)
extern EGLDisplay display;
#elif _OS_LINUX
#include <GL/gl.h>
#include <GL/glext.h>
#include <GL/glx.h>
#elif __APPLE__
#ifdef _OS_IOS
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
#include <OpenGLES/ES3/glext.h>
#define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC
#define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC
#define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC
#define glGenVertexArrays glGenVertexArraysOES
#define glDeleteVertexArrays glDeleteVertexArraysOES
#define glBindVertexArray glBindVertexArrayOES
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE GL_TEXTURE_COMPARE_MODE_EXT
#define GL_TEXTURE_COMPARE_FUNC GL_TEXTURE_COMPARE_FUNC_EXT
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_REF_TO_TEXTURE_EXT
#else
#include <Carbon/Carbon.h>
#include <AudioToolbox/AudioQueue.h>
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
#include <OpenGL/glext.h>
#include <AGL/agl.h>
#define GL_RGBA16F 0x881A
#define GL_RGBA32F 0x8814
#define GL_HALF_FLOAT 0x140B
#define GL_RGB565 GL_RGBA
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define glGenVertexArrays glGenVertexArraysAPPLE
#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
#define glBindVertexArray glBindVertexArrayAPPLE
#define GL_PROGRAM_BINARY_LENGTH 0
#define glGetProgramBinary(...) 0
#define glProgramBinary(...) 0
#endif
#elif _OS_WEB
#include <emscripten/emscripten.h>
#include <emscripten/html5.h>
#include <GLES3/gl3.h>
#include <GLES3/gl2ext.h>
#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_BORDER_EXT
#define GL_TEXTURE_BORDER_COLOR GL_TEXTURE_BORDER_COLOR_EXT
#define glGetProgramBinary(...)
#define glProgramBinary(...)
#endif
#if defined(_OS_WIN) || (defined(_OS_LINUX) && !defined(_OS_RPI)) || defined(_OS_ANDROID)
#ifdef _OS_ANDROID
#define GetProc(x) dlsym(libGL, x);
#else
void* GetProc(const char *name) {
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
return (void*)wglGetProcAddress(name);
#elif _OS_LINUX
return (void*)glXGetProcAddress((GLubyte*)name);
@@ -22,12 +151,12 @@
#define GetProcOGL(x) x=(decltype(x))GetProc(#x);
// Texture
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
PFNGLACTIVETEXTUREPROC glActiveTexture;
#endif
// VSync
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
#elif _OS_LINUX
@@ -35,7 +164,7 @@
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
#endif
#if defined(_OS_WINDOWS) || defined(_OS_LINUX)
#if defined(_OS_WIN) || defined(_OS_LINUX)
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
// Profiling
#ifdef PROFILE
@@ -200,27 +329,49 @@ namespace GAPI {
int cullMode, blendMode;
struct Texture {
enum Option { CUBEMAP = 1, MIPMAPS = 2, NEAREST = 4 };
uint32 ID;
int width, height, origWidth, origHeight;
Format format;
uint32 opt;
};
GLuint FBO, defaultFBO;
struct RenderTargetCache {
int count;
struct Item {
GLuint ID;
int width;
int height;
} items[MAX_RENDER_BUFFERS];
} rtCache[2];
bool extSupport(const char *str, const char *ext) {
return strstr(str, ext) != NULL;
}
void init() {
memset(rtCache, 0, sizeof(rtCache));
#ifdef _OS_ANDROID
void *libGL = dlopen("libGLESv2.so", RTLD_LAZY);
#endif
#if defined(_OS_WINDOWS) || (defined(_OS_LINUX) && !defined(_OS_RPI)) || defined(_OS_ANDROID)
#ifdef _OS_WINDOWS
#if defined(_OS_WIN) || (defined(_OS_LINUX) && !defined(_OS_RPI)) || defined(_OS_ANDROID)
#ifdef _OS_WIN
GetProcOGL(glActiveTexture);
#endif
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
GetProcOGL(wglSwapIntervalEXT);
#elif _OS_LINUX
GetProcOGL(glXSwapIntervalSGI);
#endif
#if defined(_OS_WINDOWS) || defined(_OS_LINUX)
#if defined(_OS_WIN) || defined(_OS_LINUX)
GetProcOGL(glGenerateMipmap);
#ifdef PROFILE
@@ -399,6 +550,44 @@ namespace GAPI {
glUseProgram(0);
}
int cacheRenderTarget(bool depth, int width, int height) {
RenderTargetCache &cache = rtCache[depth];
for (int i = 0; i < cache.count; i++)
if (cache.items[i].width == width && cache.items[i].height == height)
return i;
ASSERT(cache.count < MAX_RENDER_BUFFERS);
RenderTargetCache::Item &item = cache.items[cache.count];
item.width = width;
item.height = height;
glGenRenderbuffers(1, &item.ID);
glBindRenderbuffer(GL_RENDERBUFFER, item.ID);
glRenderbufferStorage(GL_RENDERBUFFER, depth ? GL_RGB565 : GL_DEPTH_COMPONENT16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
return cache.count++;
}
void bindTarget(Texture *target, int face) {
if (!target) { // may be a null
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
} else {
GLenum texTarget = GL_TEXTURE_2D;
if (target->opt & Texture::CUBEMAP)
texTarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + face;
bool depth = target->format == FMT_DEPTH || target->format == FMT_SHADOW;
int rtIndex = cacheRenderTarget(depth, target->width, target->height);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
glFramebufferTexture2D (GL_FRAMEBUFFER, depth ? GL_DEPTH_ATTACHMENT : GL_COLOR_ATTACHMENT0, texTarget, target->ID, 0);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, depth ? GL_COLOR_ATTACHMENT0 : GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rtCache[depth].items[rtIndex].ID);
}
}
void discardTarget(bool color, bool depth) {
#ifdef _GAPI_GLES
if (Core::support.discardFrame) {
@@ -412,8 +601,16 @@ namespace GAPI {
#endif
}
void copyTarget(Texture *dst, int xOffset, int yOffset, int x, int y, int width, int height) {
Core::active.textures[0] = NULL;
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, dst->ID);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, xOffset, yOffset, x, y, width, height);
glBindTexture(GL_TEXTURE_2D, 0);
}
void setVSync(bool enable) {
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
if (wglSwapIntervalEXT) wglSwapIntervalEXT(enable ? 1 : 0);
#elif _OS_LINUX
if (glXSwapIntervalSGI) glXSwapIntervalSGI(enable ? 1 : 0);

View File

@@ -3,6 +3,14 @@
#include "core.h"
#include <pspgu.h>
#include <pspgum.h>
#define FFP
#define TEX_SWIZZLE
//#define EDRAM_MESH
#define EDRAM_TEX
namespace GAPI {
using namespace Core;
@@ -17,6 +25,7 @@ namespace GAPI {
int cullMode, blendMode;
uint32 *cmdBuf = NULL;
void *curBackBuffer;
static int EDRAM_OFFSET;
static int EDRAM_SIZE;
@@ -121,6 +130,15 @@ namespace GAPI {
void resetState() {}
void bindTarget(Texture *texture, int face) {
/*
if (!target)
sceGuDrawBufferList(GU_PSM_5650, GAPI::curBackBuffer, 512);
else
sceGuDrawBufferList(GU_PSM_5650, target->offset, target->width);
*/
}
void discardTarget(bool color, bool depth) {}
void setVSync(bool enable) {}

View File

@@ -125,12 +125,12 @@ static const OptionItem optDetail[] = {
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_LIGHTING, SETTINGS( detail.lighting ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_SHADOWS, SETTINGS( detail.shadows ), STR_QUALITY_LOW, 0, 2 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_WATER, SETTINGS( detail.water ), STR_QUALITY_LOW, 0, 2 ),
#if defined(_OS_WINDOWS) || defined(_OS_LINUX) || defined(_OS_PSP) || defined(_OS_RPI)
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_PSP) || defined(_OS_RPI)
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_VSYNC, SETTINGS( detail.vsync ), STR_OFF, 0, 1 ),
#endif
#ifndef _OS_PSP
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_STEREO, SETTINGS( detail.stereo ), STR_OFF, 0,
#if /*defined(_OS_WINDOWS) ||*/ defined(_OS_ANDROID)
#if /*defined(_OS_WIN) ||*/ defined(_OS_ANDROID)
3 /* with VR option */
#else
2 /* without VR support */
@@ -154,7 +154,7 @@ static const OptionItem optControls[] = {
OptionItem( ),
OptionItem( OptionItem::TYPE_PARAM, STR_NOT_IMPLEMENTED , SETTINGS( playerIndex ), STR_PLAYER_1, 0, 1 ),
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_GAMEPAD , SETTINGS( controls[0].joyIndex ), STR_GAMEPAD_1, 0, 3 ),
#ifdef _OS_WINDOWS
#ifdef _OS_WIN
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_VIBRATION , SETTINGS( controls[0].vibration ), STR_OFF, 0, 1 ),
#endif
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_RETARGET , SETTINGS( controls[0].retarget ), STR_OFF, 0, 1 ),

View File

@@ -20,12 +20,12 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - trapezoidal correction
uniform mat4 uViewProj;
uniform vec3 uViewPos;
uniform vec4 uParam; // x - time, y - water height, z - clip plane sign, w - clip plane height
uniform vec4 uLightPos[MAX_LIGHTS];
uniform vec4 uLightColor[MAX_LIGHTS]; // xyz - color, w - radius * intensity
uniform vec4 uFogParams;
uniform vec4 uMaterial; // x - diffuse, y - ambient, z - specular, w - alpha
uniform vec4 uFogParams;
#ifndef PASS_SHADOW
varying vec4 vViewVec; // xyz - dir * dist, w - coord.y * clipPlaneSign

View File

@@ -4,12 +4,7 @@
#include "core.h"
#include "format.h"
struct Texture {
enum Option { CUBEMAP = 1, MIPMAPS = 2, NEAREST = 4 };
int width, height, origWidth, origHeight;
Format format;
uint32 opt;
struct Texture : GAPI::Texture {
#ifdef _OS_PSP
TR::Tile4 *tiles;
@@ -34,7 +29,6 @@ struct Texture {
}
#else
uint32 ID;
Texture *tiles[32];
#endif
@@ -82,7 +76,8 @@ struct Texture {
}
#endif
Texture(int width, int height, Format format, uint32 opt = 0, void *data = NULL) : opt(opt) {
Texture(int width, int height, Format format, uint32 opt = 0, void *data = NULL) {
this->opt = opt;
// LOG("create texture %d x %d (%d)\n", width, height, format);
#ifndef _OS_PSP