mirror of
https://gitlab.com/shinovon/re3-symbian.git
synced 2026-05-22 17:47:20 +03:00
Symbian^3 port
This commit is contained in:
parent
77cdaaf97e
commit
3eb71f2cc5
106 changed files with 2098 additions and 745 deletions
2
vendor/librw/rw.h
vendored
2
vendor/librw/rw.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
|
|
|||
4
vendor/librw/skeleton/imgui/imgui.h
vendored
4
vendor/librw/skeleton/imgui/imgui.h
vendored
|
|
@ -120,6 +120,8 @@ Index of this file:
|
|||
#if __has_warning("-Wzero-as-null-pointer-constant")
|
||||
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
|
||||
#endif
|
||||
#elif defined(__ARMCC_VERSION)
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
|
||||
|
|
@ -2836,6 +2838,8 @@ enum ImDrawCornerFlags_
|
|||
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#elif defined(__ARMCC_VERSION)
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
|
|
|||
9
vendor/librw/src/assert.cpp
vendored
Normal file
9
vendor/librw/src/assert.cpp
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#ifdef _DEBUG
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <e32std.h>
|
||||
|
||||
void __assert(const char *func, const char *file, int line, const char *message) {
|
||||
User::Panic(_L("assert"), 0);
|
||||
}
|
||||
#endif
|
||||
5
vendor/librw/src/base.cpp
vendored
5
vendor/librw/src/base.cpp
vendored
|
|
@ -18,6 +18,7 @@
|
|||
#include "rwpipeline.h"
|
||||
#include "rwobjects.h"
|
||||
#include "rwengine.h"
|
||||
#include "fcaseopen.h"
|
||||
|
||||
namespace rw {
|
||||
|
||||
|
|
@ -999,7 +1000,7 @@ StreamFile*
|
|||
StreamFile::open(const char *path, const char *mode)
|
||||
{
|
||||
assert(this->file == nil);
|
||||
this->file = fopen(path, mode);
|
||||
this->file = fcaseopen(path, mode);
|
||||
if(this->file == nil){
|
||||
RWERROR((ERR_FILE, path));
|
||||
return nil;
|
||||
|
|
@ -1106,7 +1107,7 @@ findPointer(void *p, void **list, int32 num)
|
|||
uint8*
|
||||
getFileContents(const char *name, uint32 *len)
|
||||
{
|
||||
FILE *cf = fopen(name, "rb");
|
||||
FILE *cf = fcaseopen(name, "rb");
|
||||
if(cf == nil)
|
||||
return nil;
|
||||
fseek(cf, 0, SEEK_END);
|
||||
|
|
|
|||
9
vendor/librw/src/engine.cpp
vendored
9
vendor/librw/src/engine.cpp
vendored
|
|
@ -40,6 +40,7 @@ const char *allocLocation;
|
|||
|
||||
void *malloc_h(size_t sz, uint32 hint) { if(sz == 0) return nil; return malloc(sz); }
|
||||
void *realloc_h(void *p, size_t sz, uint32 hint) { return realloc(p, sz); }
|
||||
void free_h(void *p) { free(p); }
|
||||
|
||||
struct MemoryBlock
|
||||
{
|
||||
|
|
@ -169,7 +170,7 @@ char *strdup_LOC(const char *s, uint32 hint, const char *here) {
|
|||
MemoryFunctions defaultMemfuncs = {
|
||||
malloc_h,
|
||||
realloc_h,
|
||||
free,
|
||||
free_h,
|
||||
nil,
|
||||
nil
|
||||
};
|
||||
|
|
@ -198,6 +199,12 @@ Engine::init(MemoryFunctions *memfuncs)
|
|||
Engine::memfuncs = *memfuncs;
|
||||
else
|
||||
Engine::memfuncs = defaultMemfuncs;
|
||||
if(Engine::memfuncs.rwmalloc == nil)
|
||||
Engine::memfuncs.rwmalloc = malloc_h;
|
||||
if(Engine::memfuncs.rwrealloc == nil)
|
||||
Engine::memfuncs.rwrealloc = realloc_h;
|
||||
if(Engine::memfuncs.rwfree == nil)
|
||||
Engine::memfuncs.rwfree = free_h;
|
||||
|
||||
if(Engine::memfuncs.rwmustmalloc == nil)
|
||||
Engine::memfuncs.rwmustmalloc = mustmalloc_h;
|
||||
|
|
|
|||
8
vendor/librw/src/fcaseopen.h
vendored
Normal file
8
vendor/librw/src/fcaseopen.h
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
FILE *_fcaseopen(char const *filename, char const *mode);
|
||||
#if defined(_WIN32)
|
||||
#define fcaseopen fopen
|
||||
#else
|
||||
#define fcaseopen _fcaseopen
|
||||
#endif
|
||||
210
vendor/librw/src/gl/gl3device.cpp
vendored
210
vendor/librw/src/gl/gl3device.cpp
vendored
|
|
@ -50,7 +50,7 @@ struct UniformScene
|
|||
float32 view[16];
|
||||
};
|
||||
|
||||
#define MAX_LIGHTS 8
|
||||
#define MAX_LIGHTS 4
|
||||
|
||||
struct UniformObject
|
||||
{
|
||||
|
|
@ -89,8 +89,8 @@ const char *shaderDecl100es =
|
|||
"#define VSOUT varying\n"
|
||||
"#define FSIN varying\n"
|
||||
"#define FRAGCOLOR(c) (gl_FragColor = c)\n"
|
||||
"precision highp float;\n"
|
||||
"precision highp int;\n";
|
||||
"precision mediump float;\n"
|
||||
"precision mediump int;\n";
|
||||
const char *shaderDecl310es =
|
||||
"#version 310 es\n"
|
||||
"#define VSIN(index) layout(location = index) in\n"
|
||||
|
|
@ -137,7 +137,7 @@ int32 u_matColor;
|
|||
int32 u_surfProps;
|
||||
|
||||
Shader *defaultShader, *defaultShader_noAT;
|
||||
Shader *defaultShader_fullLight, *defaultShader_fullLight_noAT;
|
||||
//Shader *defaultShader_fullLight, *defaultShader_fullLight_noAT;
|
||||
|
||||
static bool32 stateDirty = 1;
|
||||
static bool32 sceneDirty = 1;
|
||||
|
|
@ -511,7 +511,12 @@ static GLint filterConvMap_MIP[] = {
|
|||
|
||||
static GLint addressConvMap[] = {
|
||||
0, GL_REPEAT, GL_MIRRORED_REPEAT,
|
||||
#ifdef __SYMBIAN32__
|
||||
// TODO
|
||||
GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE
|
||||
#else
|
||||
GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER
|
||||
#endif
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
@ -524,10 +529,11 @@ setFilterMode(uint32 stage, int32 filter, int32 maxAniso = 1)
|
|||
Gl3Raster *natras = PLUGINOFFSET(Gl3Raster, rwStateCache.texstage[stage].raster, nativeRasterOffset);
|
||||
if(natras->filterMode != filter){
|
||||
setActiveTexture(stage);
|
||||
if(natras->autogenMipmap || natras->numLevels > 1){
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_MIP[filter]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
}else{
|
||||
// if(natras->autogenMipmap || natras->numLevels > 1){
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_MIP[filter]);
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
// }else
|
||||
{
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_NoMIP[filter]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
}
|
||||
|
|
@ -625,10 +631,11 @@ setRasterStage(uint32 stage, Raster *raster)
|
|||
uint32 addrU = rwStateCache.texstage[stage].addressingU;
|
||||
uint32 addrV = rwStateCache.texstage[stage].addressingV;
|
||||
if(natras->filterMode != filter){
|
||||
if(natras->autogenMipmap || natras->numLevels > 1){
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_MIP[filter]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
}else{
|
||||
// if(natras->autogenMipmap || natras->numLevels > 1){
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_MIP[filter]);
|
||||
// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
// }else
|
||||
{
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterConvMap_NoMIP[filter]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterConvMap_NoMIP[filter]);
|
||||
}
|
||||
|
|
@ -927,7 +934,10 @@ resetRenderState(void)
|
|||
uniformState.fogStart = 0.0f;
|
||||
uniformState.fogEnd = 0.0f;
|
||||
uniformState.fogRange = 0.0f;
|
||||
uniformState.fogColor = { 1.0f, 1.0f, 1.0f, 1.0f };
|
||||
uniformState.fogColor.red = 1.0f;
|
||||
uniformState.fogColor.green = 1.0f;
|
||||
uniformState.fogColor.blue = 1.0f;
|
||||
uniformState.fogColor.alpha = 1.0f;
|
||||
rwStateCache.gsalpha = 0;
|
||||
rwStateCache.gsalpharef = 128;
|
||||
stateDirty = 1;
|
||||
|
|
@ -1205,6 +1215,17 @@ setFrameBuffer(Camera *cam)
|
|||
|
||||
// Have to make sure depth buffer is attached to FB's fbo
|
||||
bindFramebuffer(natfb->fbo);
|
||||
#ifdef __SYMBIAN32__
|
||||
if (zbuf) {
|
||||
if(natfb->fboMate != zbuf){
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, GETGL3RASTEREXT(zbuf)->texid);
|
||||
natfb->fboMate = zbuf;
|
||||
}
|
||||
} else if(natfb->fboMate) {
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
|
||||
natfb->fboMate = nil;
|
||||
}
|
||||
#else
|
||||
if(zbuf){
|
||||
if(natfb->fboMate == zbuf){
|
||||
// all good
|
||||
|
|
@ -1235,6 +1256,7 @@ setFrameBuffer(Camera *cam)
|
|||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
|
||||
natfb->fboMate = nil;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static Rect
|
||||
|
|
@ -1245,6 +1267,9 @@ getFramebufferRect(Raster *frameBuffer)
|
|||
if(fb->type == Raster::CAMERA){
|
||||
#ifdef LIBRW_SDL2
|
||||
SDL_GetWindowSize(glGlobals.window, &r.w, &r.h);
|
||||
#elif defined __SYMBIAN32__
|
||||
r.w = glGlobals.modes[0].width;
|
||||
r.h = glGlobals.modes[0].height;
|
||||
#else
|
||||
glfwGetFramebufferSize(glGlobals.window, &r.w, &r.h);
|
||||
#endif
|
||||
|
|
@ -1411,6 +1436,9 @@ showRaster(Raster *raster, uint32 flags)
|
|||
else
|
||||
SDL_GL_SetSwapInterval(0);
|
||||
SDL_GL_SwapWindow(glGlobals.window);
|
||||
#elif defined __SYMBIAN32__
|
||||
// TODO check if context is lost
|
||||
eglSwapBuffers(eglGetCurrentDisplay(), eglGetCurrentSurface(EGL_DRAW));
|
||||
#else
|
||||
if(flags & Raster::FLIPWAITVSYNCH)
|
||||
glfwSwapInterval(1);
|
||||
|
|
@ -1599,6 +1627,55 @@ stopSDL2(void)
|
|||
SDL_DestroyWindow(glGlobals.window);
|
||||
return 1;
|
||||
}
|
||||
#elif defined __SYMBIAN32__
|
||||
static int
|
||||
openSymbian(EngineOpenParams *openparams)
|
||||
{
|
||||
glGlobals.winWidth = openparams->width;
|
||||
glGlobals.winHeight = openparams->height;
|
||||
glGlobals.winTitle = openparams->windowtitle;
|
||||
|
||||
glGlobals.modes = (DisplayMode*)rwMalloc(sizeof(DisplayMode), ID_DRIVER | MEMDUR_EVENT);
|
||||
glGlobals.modes[0].width = openparams->width;
|
||||
glGlobals.modes[0].height = openparams->height;
|
||||
glGlobals.modes[0].depth = 32;
|
||||
glGlobals.modes[0].flags = VIDEOMODEEXCLUSIVE;
|
||||
|
||||
glGlobals.numModes = 1;
|
||||
glGlobals.currentMode = 0;
|
||||
|
||||
glGlobals.numMonitors = 1;
|
||||
glGlobals.currentMonitor = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
closeSymbian(void)
|
||||
{
|
||||
if(glGlobals.modes){
|
||||
rwFree(glGlobals.modes);
|
||||
glGlobals.modes = nil;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
startSymbian(void)
|
||||
{
|
||||
glGlobals.presentWidth = glGlobals.winWidth;
|
||||
glGlobals.presentHeight = glGlobals.winHeight;
|
||||
glGlobals.presentOffX = 0;
|
||||
glGlobals.presentOffY = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
stopSymbian(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
|
||||
static void
|
||||
|
|
@ -1784,10 +1861,19 @@ initOpenGL(void)
|
|||
// printf("%d %s\n", i, ext);
|
||||
}
|
||||
*/
|
||||
#ifdef __SYMBIAN32__
|
||||
gl3Caps.dxtSupported = false;
|
||||
gl3Caps.astcSupported = false;
|
||||
gl3Caps.gles = true;
|
||||
gl3Caps.glversion = 20;
|
||||
#else
|
||||
gl3Caps.dxtSupported = !!GLAD_GL_EXT_texture_compression_s3tc;
|
||||
gl3Caps.astcSupported = !!GLAD_GL_KHR_texture_compression_astc_ldr;
|
||||
#endif
|
||||
|
||||
#ifndef __SYMBIAN32__
|
||||
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl3Caps.maxAnisotropy);
|
||||
#endif
|
||||
|
||||
if(gl3Caps.gles){
|
||||
if(gl3Caps.glversion >= 30)
|
||||
|
|
@ -1839,12 +1925,14 @@ initOpenGL(void)
|
|||
|
||||
resetRenderState();
|
||||
|
||||
#ifndef __SYMBIAN32__
|
||||
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropy);
|
||||
|
||||
if(gl3Caps.glversion >= 30){
|
||||
glGenVertexArrays(1, &vao);
|
||||
glBindVertexArray(vao);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef RW_GL_USE_UBOS
|
||||
glGenBuffers(1, &ubo_state);
|
||||
|
|
@ -1880,11 +1968,11 @@ initOpenGL(void)
|
|||
assert(defaultShader);
|
||||
defaultShader_noAT = Shader::create(vs, fs_noAT);
|
||||
assert(defaultShader_noAT);
|
||||
|
||||
defaultShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
assert(defaultShader_fullLight);
|
||||
defaultShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
assert(defaultShader_fullLight_noAT);
|
||||
//
|
||||
// defaultShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
// assert(defaultShader_fullLight);
|
||||
// defaultShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
// assert(defaultShader_fullLight_noAT);
|
||||
|
||||
openIm2D();
|
||||
openIm3D();
|
||||
|
|
@ -1902,10 +1990,10 @@ termOpenGL(void)
|
|||
defaultShader = nil;
|
||||
defaultShader_noAT->destroy();
|
||||
defaultShader_noAT = nil;
|
||||
defaultShader_fullLight->destroy();
|
||||
defaultShader_fullLight = nil;
|
||||
defaultShader_fullLight_noAT->destroy();
|
||||
defaultShader_fullLight_noAT = nil;
|
||||
// defaultShader_fullLight->destroy();
|
||||
// defaultShader_fullLight = nil;
|
||||
// defaultShader_fullLight_noAT->destroy();
|
||||
// defaultShader_fullLight_noAT = nil;
|
||||
|
||||
glDeleteTextures(1, &whitetex);
|
||||
whitetex = 0;
|
||||
|
|
@ -1983,6 +2071,82 @@ deviceSystemSDL2(DeviceReq req, void *arg, int32 n)
|
|||
return 1;
|
||||
}
|
||||
|
||||
#elif defined __SYMBIAN32__
|
||||
static int
|
||||
deviceSystemSymbian(DeviceReq req, void *arg, int32 n)
|
||||
{
|
||||
VideoMode *rwmode;
|
||||
|
||||
switch(req){
|
||||
case DEVICEOPEN:
|
||||
return openSymbian((EngineOpenParams*)arg);
|
||||
|
||||
case DEVICECLOSE:
|
||||
return closeSymbian();
|
||||
|
||||
case DEVICEINIT:
|
||||
return startSymbian() && initOpenGL();
|
||||
|
||||
case DEVICETERM:
|
||||
return termOpenGL() && stopSymbian();
|
||||
|
||||
case DEVICEFINALIZE:
|
||||
return finalizeOpenGL();
|
||||
|
||||
case DEVICEGETNUMSUBSYSTEMS:
|
||||
return glGlobals.numMonitors;
|
||||
|
||||
case DEVICEGETCURRENTSUBSYSTEM:
|
||||
return glGlobals.currentMonitor;
|
||||
|
||||
case DEVICESETSUBSYSTEM:
|
||||
if(n >= glGlobals.numMonitors)
|
||||
return 0;
|
||||
glGlobals.currentMonitor = n;
|
||||
return 1;
|
||||
|
||||
case DEVICEGETSUBSSYSTEMINFO:
|
||||
if(n >= glGlobals.numMonitors)
|
||||
return 0;
|
||||
strncpy(((SubSystemInfo*)arg)->name, "Symbian Display", 80 /*sizeof(SubSystemInfo::name)*/);
|
||||
return 1;
|
||||
|
||||
case DEVICEGETNUMVIDEOMODES:
|
||||
return glGlobals.numModes;
|
||||
|
||||
case DEVICEGETCURRENTVIDEOMODE:
|
||||
return glGlobals.currentMode;
|
||||
|
||||
case DEVICESETVIDEOMODE:
|
||||
if(n >= glGlobals.numModes)
|
||||
return 0;
|
||||
glGlobals.currentMode = n;
|
||||
return 1;
|
||||
|
||||
case DEVICEGETVIDEOMODEINFO:
|
||||
rwmode = (VideoMode*)arg;
|
||||
rwmode->width = glGlobals.modes[n].width;
|
||||
rwmode->height = glGlobals.modes[n].height;
|
||||
rwmode->depth = glGlobals.modes[n].depth;
|
||||
rwmode->flags = glGlobals.modes[n].flags;
|
||||
return 1;
|
||||
|
||||
case DEVICEGETMAXMULTISAMPLINGLEVELS:
|
||||
return 1;
|
||||
|
||||
case DEVICEGETMULTISAMPLINGLEVELS:
|
||||
return 1;
|
||||
|
||||
case DEVICESETMULTISAMPLINGLEVELS:
|
||||
glGlobals.numSamples = 1;
|
||||
return 1;
|
||||
|
||||
default:
|
||||
assert(0 && "not implemented");
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
|
||||
static int
|
||||
|
|
@ -2091,6 +2255,8 @@ Device renderdevice = {
|
|||
gl3::im3DEnd,
|
||||
#ifdef LIBRW_SDL2
|
||||
gl3::deviceSystemSDL2
|
||||
#elif defined __SYMBIAN32__
|
||||
gl3::deviceSystemSymbian
|
||||
#else
|
||||
gl3::deviceSystemGLFW
|
||||
#endif
|
||||
|
|
|
|||
177
vendor/librw/src/gl/gl3immed.cpp
vendored
177
vendor/librw/src/gl/gl3immed.cpp
vendored
|
|
@ -19,17 +19,11 @@ namespace rw {
|
|||
namespace gl3 {
|
||||
|
||||
uint32 im2DVbo, im2DIbo;
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
uint32 im2DVao;
|
||||
#endif
|
||||
|
||||
Shader *im2dOverrideShader;
|
||||
|
||||
static int32 u_xform;
|
||||
|
||||
#define STARTINDICES 10000
|
||||
#define STARTVERTICES 10000
|
||||
|
||||
static Shader *im2dShader;
|
||||
static AttribDesc im2dattribDesc[3] = {
|
||||
{ ATTRIB_POS, GL_FLOAT, GL_FALSE, 4,
|
||||
|
|
@ -62,30 +56,11 @@ openIm2D(void)
|
|||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||
im2dShader = Shader::create(vs, fs);
|
||||
assert(im2dShader);
|
||||
|
||||
glGenBuffers(1, &im2DIbo);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im2DIbo);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, STARTINDICES*2, nil, GL_STREAM_DRAW);
|
||||
|
||||
glGenBuffers(1, &im2DVbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im2DVertex), nil, GL_STREAM_DRAW);
|
||||
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glGenVertexArrays(1, &im2DVao);
|
||||
glBindVertexArray(im2DVao);
|
||||
setAttribPointers(im2dattribDesc, 3);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
closeIm2D(void)
|
||||
{
|
||||
glDeleteBuffers(1, &im2DIbo);
|
||||
glDeleteBuffers(1, &im2DVbo);
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glDeleteVertexArrays(1, &im2DVao);
|
||||
#endif
|
||||
im2dShader->destroy();
|
||||
im2dShader = nil;
|
||||
}
|
||||
|
|
@ -128,29 +103,30 @@ im2DSetXform(void)
|
|||
void
|
||||
im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
|
||||
{
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(im2DVao);
|
||||
#endif
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im2DVertex), nil, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, numVertices*sizeof(Im2DVertex), vertices);
|
||||
|
||||
if(im2dOverrideShader)
|
||||
im2dOverrideShader->use();
|
||||
else
|
||||
im2dShader->use();
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
setAttribPointers(im2dattribDesc, 3);
|
||||
#endif
|
||||
|
||||
|
||||
im2DSetXform();
|
||||
|
||||
flushCache();
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_POS);
|
||||
glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_COLOR);
|
||||
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, r));
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, u));
|
||||
|
||||
glDrawArrays(primTypeMap[primType], 0, numVertices);
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
disableAttribPointers(im2dattribDesc, 3);
|
||||
#endif
|
||||
|
||||
glDisableVertexAttribArray(ATTRIB_POS);
|
||||
glDisableVertexAttribArray(ATTRIB_COLOR);
|
||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -158,34 +134,31 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
|
|||
void *vertices, int32 numVertices,
|
||||
void *indices, int32 numIndices)
|
||||
{
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(im2DVao);
|
||||
#endif
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im2DIbo);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, STARTINDICES*2, nil, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, numIndices*2, indices);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im2DVertex), nil, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, numVertices*sizeof(Im2DVertex), vertices);
|
||||
|
||||
if(im2dOverrideShader)
|
||||
im2dOverrideShader->use();
|
||||
else
|
||||
im2dShader->use();
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
setAttribPointers(im2dattribDesc, 3);
|
||||
#endif
|
||||
|
||||
im2DSetXform();
|
||||
|
||||
flushCache();
|
||||
glDrawElements(primTypeMap[primType], numIndices,
|
||||
GL_UNSIGNED_SHORT, nil);
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
disableAttribPointers(im2dattribDesc, 3);
|
||||
#endif
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_POS);
|
||||
glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_COLOR);
|
||||
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, r));
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, u));
|
||||
|
||||
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
||||
|
||||
glDisableVertexAttribArray(ATTRIB_POS);
|
||||
glDisableVertexAttribArray(ATTRIB_COLOR);
|
||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -202,10 +175,8 @@ static AttribDesc im3dattribDesc[3] = {
|
|||
sizeof(Im3DVertex), offsetof(Im3DVertex, u) },
|
||||
};
|
||||
static uint32 im3DVbo, im3DIbo;
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
static uint32 im3DVao;
|
||||
#endif
|
||||
static int32 num3DVertices; // not actually needed here
|
||||
static void* currentIm3dVertices;
|
||||
|
||||
void
|
||||
openIm3D(void)
|
||||
|
|
@ -216,30 +187,12 @@ openIm3D(void)
|
|||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||
im3dShader = Shader::create(vs, fs);
|
||||
assert(im3dShader);
|
||||
|
||||
glGenBuffers(1, &im3DIbo);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im3DIbo);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, STARTINDICES*2, nil, GL_STREAM_DRAW);
|
||||
|
||||
glGenBuffers(1, &im3DVbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im3DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im3DVertex), nil, GL_STREAM_DRAW);
|
||||
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glGenVertexArrays(1, &im3DVao);
|
||||
glBindVertexArray(im3DVao);
|
||||
setAttribPointers(im3dattribDesc, 3);
|
||||
#endif
|
||||
currentIm3dVertices = nil;
|
||||
}
|
||||
|
||||
void
|
||||
closeIm3D(void)
|
||||
{
|
||||
glDeleteBuffers(1, &im3DIbo);
|
||||
glDeleteBuffers(1, &im3DVbo);
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glDeleteVertexArrays(1, &im3DVao);
|
||||
#endif
|
||||
im3dShader->destroy();
|
||||
im3dShader = nil;
|
||||
}
|
||||
|
|
@ -258,46 +211,60 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
|
|||
if((flags & im3d::VERTEXUV) == 0)
|
||||
SetRenderStatePtr(TEXTURERASTER, nil);
|
||||
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(im2DVao);
|
||||
#endif
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, im3DVbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, STARTVERTICES*sizeof(Im3DVertex), nil, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, 0, numVertices*sizeof(Im3DVertex), vertices);
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
setAttribPointers(im3dattribDesc, 3);
|
||||
#endif
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
currentIm3dVertices = vertices;
|
||||
num3DVertices = numVertices;
|
||||
}
|
||||
|
||||
void
|
||||
im3DRenderPrimitive(PrimitiveType primType)
|
||||
{
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im3DIbo);
|
||||
|
||||
flushCache();
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_POS);
|
||||
glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_COLOR);
|
||||
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, r));
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, u));
|
||||
|
||||
glDrawArrays(primTypeMap[primType], 0, num3DVertices);
|
||||
|
||||
glDisableVertexAttribArray(ATTRIB_POS);
|
||||
glDisableVertexAttribArray(ATTRIB_COLOR);
|
||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
}
|
||||
|
||||
void
|
||||
im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices)
|
||||
{
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im3DIbo);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, STARTINDICES*2, nil, GL_STREAM_DRAW);
|
||||
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, numIndices*2, indices);
|
||||
|
||||
flushCache();
|
||||
glDrawElements(primTypeMap[primType], numIndices,
|
||||
GL_UNSIGNED_SHORT, nil);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_POS);
|
||||
glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0);
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_COLOR);
|
||||
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, r));
|
||||
|
||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, u));
|
||||
|
||||
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
||||
|
||||
glDisableVertexAttribArray(ATTRIB_POS);
|
||||
glDisableVertexAttribArray(ATTRIB_COLOR);
|
||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||
}
|
||||
|
||||
void
|
||||
im3DEnd(void)
|
||||
{
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
disableAttribPointers(im3dattribDesc, 3);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
48
vendor/librw/src/gl/gl3matfx.cpp
vendored
48
vendor/librw/src/gl/gl3matfx.cpp
vendored
|
|
@ -25,7 +25,7 @@ namespace gl3 {
|
|||
#ifdef RW_OPENGL
|
||||
|
||||
static Shader *envShader, *envShader_noAT;
|
||||
static Shader *envShader_fullLight, *envShader_fullLight_noAT;
|
||||
//static Shader *envShader_fullLight, *envShader_fullLight_noAT;
|
||||
static int32 u_texMatrix;
|
||||
static int32 u_fxparams;
|
||||
static int32 u_colorClamp;
|
||||
|
|
@ -43,17 +43,17 @@ matfxDefaultRender(InstanceDataHeader *header, InstanceData *inst, int32 vsBits,
|
|||
|
||||
rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
|
||||
|
||||
if((vsBits & VSLIGHT_MASK) == 0){
|
||||
// if((vsBits & VSLIGHT_MASK) == 0){
|
||||
if(getAlphaTest())
|
||||
defaultShader->use();
|
||||
else
|
||||
defaultShader_noAT->use();
|
||||
}else{
|
||||
if(getAlphaTest())
|
||||
defaultShader_fullLight->use();
|
||||
else
|
||||
defaultShader_fullLight_noAT->use();
|
||||
}
|
||||
// }else{
|
||||
// if(getAlphaTest())
|
||||
// defaultShader_fullLight->use();
|
||||
// else
|
||||
// defaultShader_fullLight_noAT->use();
|
||||
// }
|
||||
|
||||
drawInst(header, inst);
|
||||
}
|
||||
|
|
@ -132,17 +132,17 @@ matfxEnvRender(InstanceDataHeader *header, InstanceData *inst, int32 vsBits, uin
|
|||
rw::SetRenderState(VERTEXALPHA, 1);
|
||||
rw::SetRenderState(SRCBLEND, BLENDONE);
|
||||
|
||||
if((vsBits & VSLIGHT_MASK) == 0){
|
||||
// if((vsBits & VSLIGHT_MASK) == 0){
|
||||
if(getAlphaTest())
|
||||
envShader->use();
|
||||
else
|
||||
envShader_noAT->use();
|
||||
}else{
|
||||
if(getAlphaTest())
|
||||
envShader_fullLight->use();
|
||||
else
|
||||
envShader_fullLight_noAT->use();
|
||||
}
|
||||
// }else{
|
||||
// if(getAlphaTest())
|
||||
// envShader_fullLight->use();
|
||||
// else
|
||||
// envShader_fullLight_noAT->use();
|
||||
// }
|
||||
|
||||
drawInst(header, inst);
|
||||
|
||||
|
|
@ -208,11 +208,11 @@ matfxOpen(void *o, int32, int32)
|
|||
assert(envShader);
|
||||
envShader_noAT = Shader::create(vs, fs_noAT);
|
||||
assert(envShader_noAT);
|
||||
|
||||
envShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
assert(envShader_fullLight);
|
||||
envShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
assert(envShader_fullLight_noAT);
|
||||
//
|
||||
// envShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
// assert(envShader_fullLight);
|
||||
// envShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
// assert(envShader_fullLight_noAT);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
@ -227,10 +227,10 @@ matfxClose(void *o, int32, int32)
|
|||
envShader = nil;
|
||||
envShader_noAT->destroy();
|
||||
envShader_noAT = nil;
|
||||
envShader_fullLight->destroy();
|
||||
envShader_fullLight = nil;
|
||||
envShader_fullLight_noAT->destroy();
|
||||
envShader_fullLight_noAT = nil;
|
||||
// envShader_fullLight->destroy();
|
||||
// envShader_fullLight = nil;
|
||||
// envShader_fullLight_noAT->destroy();
|
||||
// envShader_fullLight_noAT = nil;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
|
|||
214
vendor/librw/src/gl/gl3raster.cpp
vendored
214
vendor/librw/src/gl/gl3raster.cpp
vendored
|
|
@ -68,7 +68,7 @@ rasterCreateTexture(Raster *raster)
|
|||
Gl3Raster *natras = GETGL3RASTEREXT(raster);
|
||||
switch(raster->format & 0xF00){
|
||||
case Raster::C8888:
|
||||
natras->internalFormat = GL_RGBA8;
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->hasAlpha = 1;
|
||||
|
|
@ -76,15 +76,32 @@ rasterCreateTexture(Raster *raster)
|
|||
raster->depth = 32;
|
||||
break;
|
||||
case Raster::C888:
|
||||
natras->internalFormat = GL_RGB8;
|
||||
natras->internalFormat = GL_RGB;
|
||||
natras->format = GL_RGB;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->hasAlpha = 0;
|
||||
natras->bpp = 3;
|
||||
raster->depth = 24;
|
||||
break;
|
||||
case Raster::C565:
|
||||
natras->internalFormat = GL_RGB;
|
||||
natras->format = GL_RGB;
|
||||
natras->type = GL_UNSIGNED_SHORT_5_6_5;
|
||||
natras->hasAlpha = 0;
|
||||
natras->bpp = 2;
|
||||
raster->depth = 16;
|
||||
break;
|
||||
case Raster::C4444:
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_SHORT_4_4_4_4;
|
||||
natras->hasAlpha = 1;
|
||||
natras->bpp = 2;
|
||||
raster->depth = 16;
|
||||
break;
|
||||
case Raster::C1555:
|
||||
natras->internalFormat = GL_RGB5_A1;
|
||||
// natras->internalFormat = GL_RGB5_A1;
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_SHORT_5_5_5_1;
|
||||
natras->hasAlpha = 1;
|
||||
|
|
@ -97,11 +114,7 @@ rasterCreateTexture(Raster *raster)
|
|||
}
|
||||
|
||||
if(gl3Caps.gles){
|
||||
// glReadPixels only supports GL_RGBA
|
||||
natras->internalFormat = GL_RGBA8;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->bpp = 4;
|
||||
natras->internalFormat = natras->format;
|
||||
}
|
||||
|
||||
raster->stride = raster->width*natras->bpp;
|
||||
|
|
@ -123,10 +136,13 @@ rasterCreateTexture(Raster *raster)
|
|||
glGenTextures(1, &natras->texid);
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, natras->internalFormat,
|
||||
raster->width, raster->height,
|
||||
// raster->width, raster->height,
|
||||
1,1,
|
||||
0, natras->format, natras->type, nil);
|
||||
// TODO: allocate other levels...probably
|
||||
#ifndef __SYMBIAN32__
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, natras->numLevels-1);
|
||||
#endif
|
||||
natras->filterMode = 0;
|
||||
natras->addressU = 0;
|
||||
natras->addressV = 0;
|
||||
|
|
@ -148,22 +164,37 @@ rasterCreateCameraTexture(Raster *raster)
|
|||
Gl3Raster *natras = GETGL3RASTEREXT(raster);
|
||||
switch(raster->format & 0xF00){
|
||||
case Raster::C8888:
|
||||
natras->internalFormat = GL_RGBA8;
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->hasAlpha = 1;
|
||||
natras->bpp = 4;
|
||||
break;
|
||||
case Raster::C4444:
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_SHORT_4_4_4_4;
|
||||
natras->hasAlpha = 1;
|
||||
natras->bpp = 2;
|
||||
break;
|
||||
case Raster::C888:
|
||||
default:
|
||||
natras->internalFormat = GL_RGB8;
|
||||
natras->internalFormat = GL_RGB;
|
||||
natras->format = GL_RGB;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->hasAlpha = 0;
|
||||
natras->bpp = 3;
|
||||
break;
|
||||
case Raster::C565:
|
||||
natras->internalFormat = GL_RGB;
|
||||
natras->format = GL_RGB;
|
||||
natras->type = GL_UNSIGNED_SHORT_5_6_5;
|
||||
natras->hasAlpha = 0;
|
||||
natras->bpp = 2;
|
||||
break;
|
||||
case Raster::C1555:
|
||||
natras->internalFormat = GL_RGB5_A1;
|
||||
// natras->internalFormat = GL_RGB5_A1;
|
||||
natras->internalFormat = GL_RGBA;
|
||||
natras->format = GL_RGBA;
|
||||
natras->type = GL_UNSIGNED_SHORT_5_5_5_1;
|
||||
natras->hasAlpha = 1;
|
||||
|
|
@ -173,11 +204,7 @@ rasterCreateCameraTexture(Raster *raster)
|
|||
|
||||
// i don't remember why this was once here...
|
||||
if(gl3Caps.gles){
|
||||
// glReadPixels only supports GL_RGBA
|
||||
// natras->internalFormat = GL_RGBA8;
|
||||
// natras->format = GL_RGBA;
|
||||
// natras->type = GL_UNSIGNED_BYTE;
|
||||
// natras->bpp = 4;
|
||||
natras->internalFormat = natras->format;
|
||||
}
|
||||
|
||||
raster->stride = raster->width*natras->bpp;
|
||||
|
|
@ -187,7 +214,8 @@ rasterCreateCameraTexture(Raster *raster)
|
|||
glGenTextures(1, &natras->texid);
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, natras->internalFormat,
|
||||
raster->width, raster->height,
|
||||
// raster->width, raster->height,
|
||||
1,1,
|
||||
0, natras->format, natras->type, nil);
|
||||
natras->filterMode = 0;
|
||||
natras->addressU = 0;
|
||||
|
|
@ -197,10 +225,10 @@ rasterCreateCameraTexture(Raster *raster)
|
|||
bindTexture(prev);
|
||||
|
||||
|
||||
glGenFramebuffers(1, &natras->fbo);
|
||||
bindFramebuffer(natras->fbo);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, natras->texid, 0);
|
||||
bindFramebuffer(0);
|
||||
// glGenFramebuffers(1, &natras->fbo);
|
||||
// bindFramebuffer(natras->fbo);
|
||||
// glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, natras->texid, 0);
|
||||
// bindFramebuffer(0);
|
||||
natras->fboMate = nil;
|
||||
|
||||
return raster;
|
||||
|
|
@ -214,14 +242,19 @@ rasterCreateCamera(Raster *raster)
|
|||
// TODO: set/check width, height, depth, format?
|
||||
|
||||
// used for locking right now
|
||||
raster->format = Raster::C888;
|
||||
natras->internalFormat = GL_RGB8;
|
||||
natras->format = GL_RGB;
|
||||
natras->type = GL_UNSIGNED_BYTE;
|
||||
natras->hasAlpha = 0;
|
||||
natras->bpp = 3;
|
||||
|
||||
natras->autogenMipmap = 0;
|
||||
// raster->format = Raster::C888;
|
||||
// natras->internalFormat = GL_RGB;
|
||||
// natras->format = GL_RGB;
|
||||
// natras->type = GL_UNSIGNED_BYTE;
|
||||
// natras->hasAlpha = 0;
|
||||
// natras->bpp = 3;
|
||||
//
|
||||
// natras->autogenMipmap = 0;
|
||||
|
||||
raster->originalWidth = raster->width;
|
||||
raster->originalHeight = raster->height;
|
||||
raster->stride = 0;
|
||||
raster->pixels = nil;
|
||||
|
||||
natras->texid = 0;
|
||||
natras->fbo = 0;
|
||||
|
|
@ -234,34 +267,45 @@ static Raster*
|
|||
rasterCreateZbuffer(Raster *raster)
|
||||
{
|
||||
Gl3Raster *natras = GETGL3RASTEREXT(raster);
|
||||
|
||||
raster->originalWidth = raster->width;
|
||||
raster->originalHeight = raster->height;
|
||||
raster->stride = 0;
|
||||
raster->pixels = nil;
|
||||
|
||||
if(gl3Caps.gles){
|
||||
// have to use RBO on GLES!!
|
||||
glGenRenderbuffers(1, &natras->texid);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, natras->texid);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, raster->width, raster->height);
|
||||
}else{
|
||||
// TODO: set/check width, height, depth, format?
|
||||
natras->internalFormat = GL_DEPTH_STENCIL;
|
||||
natras->format = GL_DEPTH_STENCIL;
|
||||
natras->type = GL_UNSIGNED_INT_24_8;
|
||||
|
||||
natras->autogenMipmap = 0;
|
||||
|
||||
glGenTextures(1, &natras->texid);
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, natras->internalFormat,
|
||||
raster->width, raster->height,
|
||||
0, natras->format, natras->type, nil);
|
||||
natras->filterMode = 0;
|
||||
natras->addressU = 0;
|
||||
natras->addressV = 0;
|
||||
natras->maxAnisotropy = 1;
|
||||
|
||||
bindTexture(prev);
|
||||
}
|
||||
natras->fbo = 0;
|
||||
natras->fboMate = nil;
|
||||
// if(gl3Caps.gles){
|
||||
// // have to use RBO on GLES!!
|
||||
// glGenRenderbuffers(1, &natras->texid);
|
||||
// glBindRenderbuffer(GL_RENDERBUFFER, natras->texid);
|
||||
//#ifdef __SYMBIAN32__
|
||||
// glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, raster->width, raster->height);
|
||||
//#else
|
||||
// glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, raster->width, raster->height);
|
||||
//#endif
|
||||
//#ifndef __SYMBIAN32__
|
||||
// }else{
|
||||
// // TODO: set/check width, height, depth, format?
|
||||
// natras->internalFormat = GL_DEPTH_STENCIL;
|
||||
// natras->format = GL_DEPTH_STENCIL;
|
||||
// natras->type = GL_UNSIGNED_INT_24_8;
|
||||
//
|
||||
// natras->autogenMipmap = 0;
|
||||
//
|
||||
// glGenTextures(1, &natras->texid);
|
||||
// uint32 prev = bindTexture(natras->texid);
|
||||
// glTexImage2D(GL_TEXTURE_2D, 0, natras->internalFormat,
|
||||
// raster->width, raster->height,
|
||||
// 0, natras->format, natras->type, nil);
|
||||
// natras->filterMode = 0;
|
||||
// natras->addressU = 0;
|
||||
// natras->addressV = 0;
|
||||
// natras->maxAnisotropy = 1;
|
||||
//
|
||||
// bindTexture(prev);
|
||||
//#endif
|
||||
// }
|
||||
// natras->fbo = 0;
|
||||
// natras->fboMate = nil;
|
||||
|
||||
return raster;
|
||||
}
|
||||
|
|
@ -311,6 +355,7 @@ allocateDXT(Raster *raster, int32 dxt, int32 numLevels, bool32 hasAlpha)
|
|||
raster->depth = 16;
|
||||
|
||||
natras->isCompressed = 1;
|
||||
|
||||
if(raster->format & Raster::MIPMAP)
|
||||
natras->numLevels = numLevels;
|
||||
natras->autogenMipmap = (raster->format & (Raster::MIPMAP|Raster::AUTOMIPMAP)) == (Raster::MIPMAP|Raster::AUTOMIPMAP);
|
||||
|
|
@ -323,7 +368,9 @@ allocateDXT(Raster *raster, int32 dxt, int32 numLevels, bool32 hasAlpha)
|
|||
raster->width, raster->height,
|
||||
0, natras->format, natras->type, nil);
|
||||
// TODO: allocate other levels...probably
|
||||
#ifndef __SYMBIAN32__
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, natras->numLevels-1);
|
||||
#endif
|
||||
natras->filterMode = 0;
|
||||
natras->addressU = 0;
|
||||
natras->addressV = 0;
|
||||
|
|
@ -471,26 +518,33 @@ rasterLock(Raster *raster, int32 level, int32 lockMode)
|
|||
memcpy(px, natras->backingStore->levels[level].data, allocSz);
|
||||
}else{
|
||||
// GLES is losing here
|
||||
#ifndef __SYMBIAN32__ // TODO
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
glGetCompressedTexImage(GL_TEXTURE_2D, level, px);
|
||||
bindTexture(prev);
|
||||
#endif
|
||||
}
|
||||
#ifdef __SYMBIAN32__
|
||||
} else {
|
||||
#else
|
||||
}else if(gl3Caps.gles){
|
||||
#endif
|
||||
GLuint fbo;
|
||||
glGenFramebuffers(1, &fbo);
|
||||
bindFramebuffer(fbo);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, natras->texid, 0);
|
||||
GLenum e = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
assert(natras->format == GL_RGBA);
|
||||
glReadPixels(0, 0, raster->width, raster->height, natras->format, natras->type, px);
|
||||
//e = glGetError(); printf("GL err4 %x (%x)\n", e, natras->format);
|
||||
bindFramebuffer(0);
|
||||
glDeleteFramebuffers(1, &fbo);
|
||||
#ifndef __SYMBIAN32__
|
||||
}else{
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
glGetTexImage(GL_TEXTURE_2D, level, natras->format, natras->type, px);
|
||||
bindTexture(prev);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -508,7 +562,11 @@ assert(natras->format == GL_RGBA);
|
|||
px = (uint8*)rwMalloc(allocSz, MEMDUR_EVENT | ID_DRIVER);
|
||||
assert(raster->pixels == nil);
|
||||
raster->pixels = px;
|
||||
#ifdef __SYMBIAN32__
|
||||
memset(px, 0, allocSz);
|
||||
#else
|
||||
glReadBuffer(GL_BACK);
|
||||
#endif
|
||||
glReadPixels(0, 0, raster->width, raster->height, GL_RGB, GL_UNSIGNED_BYTE, px);
|
||||
|
||||
raster->privateFlags = lockMode;
|
||||
|
|
@ -538,6 +596,7 @@ rasterUnlock(Raster *raster, int32 level)
|
|||
case Raster::TEXTURE:
|
||||
case Raster::CAMERATEXTURE:
|
||||
if(raster->privateFlags & Raster::LOCKWRITE){
|
||||
if (level != 0) break;
|
||||
uint32 prev = bindTexture(natras->texid);
|
||||
if(natras->isCompressed){
|
||||
glCompressedTexImage2D(GL_TEXTURE_2D, level, natras->internalFormat,
|
||||
|
|
@ -550,10 +609,27 @@ rasterUnlock(Raster *raster, int32 level)
|
|||
natras->backingStore->levels[level].size);
|
||||
}
|
||||
}else{
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glTexImage2D(GL_TEXTURE_2D, level, natras->internalFormat,
|
||||
raster->width, raster->height,
|
||||
0, natras->format, natras->type, raster->pixels);
|
||||
// glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
if (raster->pixels != nil && natras->format == GL_RGBA && natras->type == GL_UNSIGNED_BYTE) {
|
||||
// convert to 16-bit
|
||||
uint16_t* pixels16 = (uint16_t*)malloc(raster->width * raster->height * sizeof(uint16_t));
|
||||
uint8_t* pixels8 = (uint8_t*)raster->pixels;
|
||||
|
||||
for (int i = 0; i < raster->width * raster->height; i++) {
|
||||
uint8_t r = pixels8[i * 4 + 0];
|
||||
uint8_t g = pixels8[i * 4 + 1];
|
||||
uint8_t b = pixels8[i * 4 + 2];
|
||||
uint8_t a = pixels8[i * 4 + 3];
|
||||
|
||||
pixels16[i] = ((r >> 4) << 12) | ((g >> 4) << 8) | ((b >> 4) << 4) | (a >> 4);
|
||||
}
|
||||
glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, raster->width, raster->height, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, pixels16);
|
||||
free(pixels16);
|
||||
} else {
|
||||
glTexImage2D(GL_TEXTURE_2D, level, natras->internalFormat,
|
||||
raster->width, raster->height,
|
||||
0, natras->format, natras->type, raster->pixels);
|
||||
}
|
||||
}
|
||||
if(level == 0 && natras->autogenMipmap)
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
|
|
@ -659,9 +735,7 @@ rasterFromImage(Raster *raster, Image *image)
|
|||
assert(!natras->isCompressed);
|
||||
switch(image->depth){
|
||||
case 32:
|
||||
if(gl3Caps.gles)
|
||||
conv = conv_RGBA8888_from_RGBA8888;
|
||||
else if(format == Raster::C8888)
|
||||
if(format == Raster::C8888)
|
||||
conv = conv_RGBA8888_from_RGBA8888;
|
||||
else if(format == Raster::C888)
|
||||
conv = conv_RGB888_from_RGB888;
|
||||
|
|
@ -669,9 +743,7 @@ rasterFromImage(Raster *raster, Image *image)
|
|||
goto err;
|
||||
break;
|
||||
case 24:
|
||||
if(gl3Caps.gles)
|
||||
conv = conv_RGBA8888_from_RGB888;
|
||||
else if(format == Raster::C8888)
|
||||
if(format == Raster::C8888)
|
||||
conv = conv_RGBA8888_from_RGB888;
|
||||
else if(format == Raster::C888)
|
||||
conv = conv_RGB888_from_RGB888;
|
||||
|
|
@ -679,7 +751,7 @@ rasterFromImage(Raster *raster, Image *image)
|
|||
goto err;
|
||||
break;
|
||||
case 16:
|
||||
if(gl3Caps.gles)
|
||||
if(format == Raster::C8888)
|
||||
conv = conv_RGBA8888_from_ARGB1555;
|
||||
else if(format == Raster::C1555)
|
||||
conv = conv_RGBA5551_from_ARGB1555;
|
||||
|
|
@ -850,7 +922,11 @@ destroyNativeRaster(void *object, int32 offset, int32)
|
|||
Gl3Raster *oldfb = GETGL3RASTEREXT(natras->fboMate);
|
||||
if(oldfb->fbo){
|
||||
bindFramebuffer(oldfb->fbo);
|
||||
#ifdef __SYMBIAN32__
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
|
||||
#else
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
|
||||
#endif
|
||||
}
|
||||
oldfb->fboMate = nil;
|
||||
}
|
||||
|
|
|
|||
30
vendor/librw/src/gl/gl3render.cpp
vendored
30
vendor/librw/src/gl/gl3render.cpp
vendored
|
|
@ -64,9 +64,9 @@ drawInst_GSemu(InstanceDataHeader *header, InstanceData *inst)
|
|||
void
|
||||
drawInst(InstanceDataHeader *header, InstanceData *inst)
|
||||
{
|
||||
if(rw::GetRenderState(rw::GSALPHATEST))
|
||||
drawInst_GSemu(header, inst);
|
||||
else
|
||||
// if(rw::GetRenderState(rw::GSALPHATEST))
|
||||
// drawInst_GSemu(header, inst);
|
||||
// else
|
||||
drawInst_simple(header, inst);
|
||||
}
|
||||
|
||||
|
|
@ -93,21 +93,15 @@ disableAttribPointers(AttribDesc *attribDescs, int32 numAttribs)
|
|||
void
|
||||
setupVertexInput(InstanceDataHeader *header)
|
||||
{
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(header->vao);
|
||||
#else
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
|
||||
setAttribPointers(header->attribDesc, header->numAttribs);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
teardownVertexInput(InstanceDataHeader *header)
|
||||
{
|
||||
#ifndef RW_GL_USE_VAOS
|
||||
disableAttribPointers(header->attribDesc, header->numAttribs);
|
||||
#endif
|
||||
}
|
||||
|
||||
int32
|
||||
|
|
@ -117,9 +111,9 @@ lightingCB(Atomic *atomic)
|
|||
Light *directionals[8];
|
||||
Light *locals[8];
|
||||
lightData.directionals = directionals;
|
||||
lightData.numDirectionals = 8;
|
||||
lightData.numDirectionals = 0; // 8;
|
||||
lightData.locals = locals;
|
||||
lightData.numLocals = 8;
|
||||
lightData.numLocals = 0; // 8;
|
||||
|
||||
if(atomic->geometry->flags & rw::Geometry::LIGHT){
|
||||
((World*)engine->currentWorld)->enumerateLights(atomic, &lightData);
|
||||
|
|
@ -158,17 +152,17 @@ defaultRenderCB(Atomic *atomic, InstanceDataHeader *header)
|
|||
|
||||
rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
|
||||
|
||||
if((vsBits & VSLIGHT_MASK) == 0){
|
||||
// if((vsBits & VSLIGHT_MASK) == 0){
|
||||
if(getAlphaTest())
|
||||
defaultShader->use();
|
||||
else
|
||||
defaultShader_noAT->use();
|
||||
}else{
|
||||
if(getAlphaTest())
|
||||
defaultShader_fullLight->use();
|
||||
else
|
||||
defaultShader_fullLight_noAT->use();
|
||||
}
|
||||
// }else{
|
||||
// if(getAlphaTest())
|
||||
// defaultShader_fullLight->use();
|
||||
// else
|
||||
// defaultShader_fullLight_noAT->use();
|
||||
// }
|
||||
|
||||
drawInst(header, inst);
|
||||
inst++;
|
||||
|
|
|
|||
4
vendor/librw/src/gl/gl3shader.cpp
vendored
4
vendor/librw/src/gl/gl3shader.cpp
vendored
|
|
@ -189,8 +189,8 @@ compileshader(GLenum type, const char **src, GLuint *shader)
|
|||
glShaderSource(shdr, n, src, nil);
|
||||
glCompileShader(shdr);
|
||||
glGetShaderiv(shdr, GL_COMPILE_STATUS, &success);
|
||||
printShaderSource(src);
|
||||
if(!success){
|
||||
printShaderSource(src);
|
||||
fprintf(stderr, "Error in %s shader\n",
|
||||
type == GL_VERTEX_SHADER ? "vertex" : "fragment");
|
||||
glGetShaderiv(shdr, GL_INFO_LOG_LENGTH, &len);
|
||||
|
|
@ -295,6 +295,7 @@ Shader::create(const char **vsrc, const char **fsrc)
|
|||
printf("\n");
|
||||
#endif
|
||||
|
||||
#ifndef __SYMBIAN32__
|
||||
// set uniform block binding
|
||||
for(i = 0; i < uniformRegistry.numBlocks; i++){
|
||||
int idx = glGetUniformBlockIndex(program,
|
||||
|
|
@ -302,6 +303,7 @@ Shader::create(const char **vsrc, const char **fsrc)
|
|||
if(idx >= 0)
|
||||
glUniformBlockBinding(program, idx, i);
|
||||
}
|
||||
#endif
|
||||
|
||||
// query uniform locations
|
||||
sh->program = program;
|
||||
|
|
|
|||
71
vendor/librw/src/gl/gl3skin.cpp
vendored
71
vendor/librw/src/gl/gl3skin.cpp
vendored
|
|
@ -25,7 +25,7 @@ namespace gl3 {
|
|||
#ifdef RW_OPENGL
|
||||
|
||||
static Shader *skinShader, *skinShader_noAT;
|
||||
static Shader *skinShader_fullLight, *skinShader_fullLight_noAT;
|
||||
//static Shader *skinShader_fullLight, *skinShader_fullLight_noAT;
|
||||
static int32 u_boneMatrices;
|
||||
|
||||
void
|
||||
|
|
@ -189,17 +189,9 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
|
|||
header->totalNumVertex, a->stride);
|
||||
}
|
||||
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
glBindVertexArray(header->vao);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
|
||||
#endif
|
||||
glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, header->totalNumVertex*attribs[0].stride,
|
||||
header->vertexBuffer, GL_STATIC_DRAW);
|
||||
#ifdef RW_GL_USE_VAOS
|
||||
setAttribPointers(header->attribDesc, header->numAttribs);
|
||||
glBindVertexArray(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -208,7 +200,8 @@ skinUninstanceCB(Geometry *geo, InstanceDataHeader *header)
|
|||
assert(0 && "can't uninstance");
|
||||
}
|
||||
|
||||
static float skinMatrices[64*16];
|
||||
#define MAX_BONES 24
|
||||
static float skinMatrices[MAX_BONES*16];
|
||||
|
||||
void
|
||||
uploadSkinMatrices(Atomic *a)
|
||||
|
|
@ -218,13 +211,18 @@ uploadSkinMatrices(Atomic *a)
|
|||
Matrix *m = (Matrix*)skinMatrices;
|
||||
HAnimHierarchy *hier = Skin::getHierarchy(a);
|
||||
|
||||
int numBones = skin->numBones;
|
||||
if (numBones > MAX_BONES) numBones = MAX_BONES;
|
||||
|
||||
if(hier){
|
||||
Matrix *invMats = (Matrix*)skin->inverseMatrices;
|
||||
Matrix tmp;
|
||||
|
||||
int numNodes = hier->numNodes;
|
||||
if (numNodes > MAX_BONES) numNodes = MAX_BONES;
|
||||
|
||||
assert(skin->numBones == hier->numNodes);
|
||||
if(hier->flags & HAnimHierarchy::LOCALSPACEMATRICES){
|
||||
for(i = 0; i < hier->numNodes; i++){
|
||||
for(i = 0; i < numNodes; i++){
|
||||
invMats[i].flags = 0;
|
||||
Matrix::mult(m, &invMats[i], &hier->matrices[i]);
|
||||
m++;
|
||||
|
|
@ -232,7 +230,7 @@ uploadSkinMatrices(Atomic *a)
|
|||
}else{
|
||||
Matrix invAtmMat;
|
||||
Matrix::invert(&invAtmMat, a->getFrame()->getLTM());
|
||||
for(i = 0; i < hier->numNodes; i++){
|
||||
for(i = 0; i < numNodes; i++){
|
||||
invMats[i].flags = 0;
|
||||
Matrix::mult(&tmp, &hier->matrices[i], &invAtmMat);
|
||||
Matrix::mult(m, &invMats[i], &tmp);
|
||||
|
|
@ -240,7 +238,7 @@ uploadSkinMatrices(Atomic *a)
|
|||
}
|
||||
}
|
||||
}else{
|
||||
for(i = 0; i < skin->numBones; i++){
|
||||
for(i = 0; i < numBones; i++){
|
||||
m->setIdentity();
|
||||
m++;
|
||||
}
|
||||
|
|
@ -273,18 +271,20 @@ skinRenderCB(Atomic *atomic, InstanceDataHeader *header)
|
|||
|
||||
rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
|
||||
|
||||
if((vsBits & VSLIGHT_MASK) == 0){
|
||||
// if((vsBits & VSLIGHT_MASK) == 0){
|
||||
if(getAlphaTest())
|
||||
skinShader->use();
|
||||
else
|
||||
skinShader_noAT->use();
|
||||
}else{
|
||||
if(getAlphaTest())
|
||||
skinShader_fullLight->use();
|
||||
else
|
||||
skinShader_fullLight_noAT->use();
|
||||
}
|
||||
// }else{
|
||||
// if(getAlphaTest())
|
||||
// skinShader_fullLight->use();
|
||||
// else
|
||||
// skinShader_fullLight_noAT->use();
|
||||
// }
|
||||
|
||||
// defaultShader->use();
|
||||
|
||||
drawInst(header, inst);
|
||||
inst++;
|
||||
}
|
||||
|
|
@ -295,7 +295,7 @@ static void*
|
|||
skinOpen(void *o, int32, int32)
|
||||
{
|
||||
skinGlobals.pipelines[PLATFORM_GL3] = makeSkinPipeline();
|
||||
|
||||
|
||||
#include "shaders/simple_fs_gl.inc"
|
||||
#include "shaders/skin_gl.inc"
|
||||
const char *vs[] = { shaderDecl, header_vert_src, skin_vert_src, nil };
|
||||
|
|
@ -307,11 +307,11 @@ skinOpen(void *o, int32, int32)
|
|||
assert(skinShader);
|
||||
skinShader_noAT = Shader::create(vs, fs_noAT);
|
||||
assert(skinShader_noAT);
|
||||
|
||||
skinShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
assert(skinShader_fullLight);
|
||||
skinShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
assert(skinShader_fullLight_noAT);
|
||||
//
|
||||
// skinShader_fullLight = Shader::create(vs_fullLight, fs);
|
||||
// assert(skinShader_fullLight);
|
||||
// skinShader_fullLight_noAT = Shader::create(vs_fullLight, fs_noAT);
|
||||
// assert(skinShader_fullLight_noAT);
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
@ -326,10 +326,10 @@ skinClose(void *o, int32, int32)
|
|||
skinShader = nil;
|
||||
skinShader_noAT->destroy();
|
||||
skinShader_noAT = nil;
|
||||
skinShader_fullLight->destroy();
|
||||
skinShader_fullLight = nil;
|
||||
skinShader_fullLight_noAT->destroy();
|
||||
skinShader_fullLight_noAT = nil;
|
||||
// skinShader_fullLight->destroy();
|
||||
// skinShader_fullLight = nil;
|
||||
// skinShader_fullLight_noAT->destroy();
|
||||
// skinShader_fullLight_noAT = nil;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
|
@ -337,10 +337,11 @@ skinClose(void *o, int32, int32)
|
|||
void
|
||||
initSkin(void)
|
||||
{
|
||||
u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, 64);
|
||||
|
||||
Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
||||
skinOpen, skinClose);
|
||||
// TODO
|
||||
// u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, MAX_BONES);
|
||||
//
|
||||
// Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
||||
// skinOpen, skinClose);
|
||||
}
|
||||
|
||||
ObjPipeline*
|
||||
|
|
|
|||
17
vendor/librw/src/gl/rwgl3.h
vendored
17
vendor/librw/src/gl/rwgl3.h
vendored
|
|
@ -1,4 +1,14 @@
|
|||
#ifdef RW_GL3
|
||||
#ifdef __SYMBIAN32__
|
||||
#include <gles2/gl2.h>
|
||||
#include <gles2/gl2ext.h>
|
||||
#include <egl/egl.h>
|
||||
|
||||
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
|
||||
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
|
||||
#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
|
||||
#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
|
||||
#else
|
||||
#include "glad/glad.h"
|
||||
#ifdef LIBRW_SDL2
|
||||
#include <SDL.h>
|
||||
|
|
@ -6,6 +16,7 @@
|
|||
#include <GLFW/glfw3.h>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
namespace rw {
|
||||
|
||||
|
|
@ -15,7 +26,7 @@ struct EngineOpenParams
|
|||
#ifdef LIBRW_SDL2
|
||||
SDL_Window **window;
|
||||
bool32 fullscreen;
|
||||
#else
|
||||
#elif !defined(__SYMBIAN32__)
|
||||
GLFWwindow **window;
|
||||
#endif
|
||||
int width, height;
|
||||
|
|
@ -49,12 +60,14 @@ enum AttribIndices
|
|||
ATTRIB_INDICES,
|
||||
ATTRIB_TEXCOORDS0,
|
||||
ATTRIB_TEXCOORDS1,
|
||||
#if 0
|
||||
ATTRIB_TEXCOORDS2,
|
||||
ATTRIB_TEXCOORDS3,
|
||||
ATTRIB_TEXCOORDS4,
|
||||
ATTRIB_TEXCOORDS5,
|
||||
ATTRIB_TEXCOORDS6,
|
||||
ATTRIB_TEXCOORDS7,
|
||||
#endif
|
||||
};
|
||||
|
||||
// default uniform indices
|
||||
|
|
@ -98,7 +111,7 @@ struct InstanceDataHeader : rw::InstanceDataHeader
|
|||
struct Shader;
|
||||
|
||||
extern Shader *defaultShader, *defaultShader_noAT;
|
||||
extern Shader *defaultShader_fullLight, *defaultShader_fullLight_noAT;
|
||||
//extern Shader *defaultShader_fullLight, *defaultShader_fullLight_noAT;
|
||||
|
||||
struct Im3DVertex
|
||||
{
|
||||
|
|
|
|||
7
vendor/librw/src/gl/rwgl3impl.h
vendored
7
vendor/librw/src/gl/rwgl3impl.h
vendored
|
|
@ -24,10 +24,15 @@ void im3DEnd(void);
|
|||
|
||||
struct DisplayMode
|
||||
{
|
||||
#ifdef __SYMBIAN32__
|
||||
uint32 width;
|
||||
uint32 height;
|
||||
#else
|
||||
#ifdef LIBRW_SDL2
|
||||
SDL_DisplayMode mode;
|
||||
#else
|
||||
GLFWvidmode mode;
|
||||
#endif
|
||||
#endif
|
||||
int32 depth;
|
||||
uint32 flags;
|
||||
|
|
@ -40,10 +45,12 @@ struct GlGlobals
|
|||
SDL_Window *window;
|
||||
SDL_GLContext glcontext;
|
||||
#else
|
||||
#ifndef __SYMBIAN32__
|
||||
GLFWwindow **pWindow;
|
||||
GLFWwindow *window;
|
||||
|
||||
GLFWmonitor *monitor;
|
||||
#endif
|
||||
int numMonitors;
|
||||
int currentMonitor;
|
||||
#endif
|
||||
|
|
|
|||
21
vendor/librw/src/gl/shaders/Makefile
vendored
21
vendor/librw/src/gl/shaders/Makefile
vendored
|
|
@ -2,44 +2,43 @@ all: header_vs.inc header_fs.inc im2d_gl.inc im3d_gl.inc default_vs_gl.inc simpl
|
|||
|
||||
header_vs.inc: header.vert
|
||||
(echo 'const char *header_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' header.vert;\
|
||||
sed 's/..*/"&\\\\n"/' header.vert;\
|
||||
echo ';') >header_vs.inc
|
||||
|
||||
header_fs.inc: header.frag
|
||||
(echo 'const char *header_frag_src =';\
|
||||
sed 's/..*/"&\\n"/' header.frag;\
|
||||
sed 's/..*/"&\\\\n"/' header.frag;\
|
||||
echo ';') >header_fs.inc
|
||||
|
||||
im2d_gl.inc: im2d.vert
|
||||
(echo 'const char *im2d_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' im2d.vert;\
|
||||
sed 's/..*/"&\\\\n"/' im2d.vert;\
|
||||
echo ';') >im2d_gl.inc
|
||||
|
||||
im3d_gl.inc: im3d.vert
|
||||
(echo 'const char *im3d_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' im3d.vert;\
|
||||
sed 's/..*/"&\\\\n"/' im3d.vert;\
|
||||
echo ';') >im3d_gl.inc
|
||||
|
||||
default_vs_gl.inc: default.vert
|
||||
(echo 'const char *default_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' default.vert;\
|
||||
sed 's/..*/"&\\\\n"/' default.vert;\
|
||||
echo ';') >default_vs_gl.inc
|
||||
|
||||
simple_fs_gl.inc: simple.frag
|
||||
(echo 'const char *simple_frag_src =';\
|
||||
sed 's/..*/"&\\n"/' simple.frag;\
|
||||
sed 's/..*/"&\\\\n"/' simple.frag;\
|
||||
echo ';') >simple_fs_gl.inc
|
||||
|
||||
matfx_gl.inc: matfx_env.frag matfx_env.vert
|
||||
(echo 'const char *matfx_env_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' matfx_env.vert;\
|
||||
sed 's/..*/"&\\\\n"/' matfx_env.vert;\
|
||||
echo ';';\
|
||||
echo 'const char *matfx_env_frag_src =';\
|
||||
sed 's/..*/"&\\n"/' matfx_env.frag;\
|
||||
sed 's/..*/"&\\\\n"/' matfx_env.frag;\
|
||||
echo ';') >matfx_gl.inc
|
||||
|
||||
skin_gl.inc: skin.vert
|
||||
(echo 'const char *skin_vert_src =';\
|
||||
sed 's/..*/"&\\n"/' skin.vert;\
|
||||
echo ';') >skin_gl.inc
|
||||
|
||||
sed 's/..*/"&\\\\n"/' skin.vert;\
|
||||
echo ';') >skin_gl.inc
|
||||
9
vendor/librw/src/gl/shaders/default.vert
vendored
9
vendor/librw/src/gl/shaders/default.vert
vendored
|
|
@ -1,8 +1,7 @@
|
|||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
|
||||
VSOUT vec4 v_color;
|
||||
VSOUT vec2 v_tex0;
|
||||
VSOUT float v_fog;
|
||||
VSOUT vec3 v_tex0_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
|
|
@ -11,7 +10,7 @@ main(void)
|
|||
gl_Position = u_proj * u_view * Vertex;
|
||||
vec3 Normal = mat3(u_world) * in_normal;
|
||||
|
||||
v_tex0 = in_tex0;
|
||||
v_tex0_fog.xy = in_tex0;
|
||||
|
||||
v_color = in_color;
|
||||
v_color.rgb += u_ambLight.rgb*surfAmbient;
|
||||
|
|
@ -19,5 +18,5 @@ main(void)
|
|||
v_color = clamp(v_color, 0.0, 1.0);
|
||||
v_color *= u_matColor;
|
||||
|
||||
v_fog = DoFog(gl_Position.w);
|
||||
v_tex0_fog.z = DoFog(gl_Position.w);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
const char *default_vert_src =
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
|
||||
"VSOUT vec4 v_color;\n"
|
||||
"VSOUT vec2 v_tex0;\n"
|
||||
"VSOUT float v_fog;\n"
|
||||
"VSOUT vec3 v_tex0_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
|
|
@ -12,7 +11,7 @@ const char *default_vert_src =
|
|||
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||
|
||||
" v_tex0 = in_tex0;\n"
|
||||
" v_tex0_fog.xy = in_tex0;\n"
|
||||
|
||||
" v_color = in_color;\n"
|
||||
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||
|
|
@ -20,6 +19,6 @@ const char *default_vert_src =
|
|||
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||
" v_color *= u_matColor;\n"
|
||||
|
||||
" v_fog = DoFog(gl_Position.w);\n"
|
||||
" v_tex0_fog.z = DoFog(gl_Position.w);\n"
|
||||
"}\n"
|
||||
;
|
||||
|
|
|
|||
4
vendor/librw/src/gl/shaders/header.vert
vendored
4
vendor/librw/src/gl/shaders/header.vert
vendored
|
|
@ -49,7 +49,7 @@ uniform mat4 u_proj;
|
|||
uniform mat4 u_view;
|
||||
#endif
|
||||
|
||||
#define MAX_LIGHTS 8
|
||||
#define MAX_LIGHTS 4
|
||||
|
||||
#ifdef USE_UBOS
|
||||
layout(std140) uniform Object
|
||||
|
|
@ -80,6 +80,7 @@ uniform vec4 u_surfProps; // amb, spec, diff, extra
|
|||
vec3 DoDynamicLight(vec3 V, vec3 N)
|
||||
{
|
||||
vec3 color = vec3(0.0, 0.0, 0.0);
|
||||
/*
|
||||
for(int i = 0; i < MAX_LIGHTS; i++){
|
||||
if(u_lightParams[i].x == 0.0)
|
||||
break;
|
||||
|
|
@ -119,6 +120,7 @@ vec3 DoDynamicLight(vec3 V, vec3 N)
|
|||
#endif
|
||||
;
|
||||
}
|
||||
*/
|
||||
return color;
|
||||
}
|
||||
|
||||
|
|
|
|||
4
vendor/librw/src/gl/shaders/header_vs.inc
vendored
4
vendor/librw/src/gl/shaders/header_vs.inc
vendored
|
|
@ -50,7 +50,7 @@ const char *header_vert_src =
|
|||
"uniform mat4 u_view;\n"
|
||||
"#endif\n"
|
||||
|
||||
"#define MAX_LIGHTS 8\n"
|
||||
"#define MAX_LIGHTS 4\n"
|
||||
|
||||
"#ifdef USE_UBOS\n"
|
||||
"layout(std140) uniform Object\n"
|
||||
|
|
@ -81,6 +81,7 @@ const char *header_vert_src =
|
|||
"vec3 DoDynamicLight(vec3 V, vec3 N)\n"
|
||||
"{\n"
|
||||
" vec3 color = vec3(0.0, 0.0, 0.0);\n"
|
||||
"/*\n"
|
||||
" for(int i = 0; i < MAX_LIGHTS; i++){\n"
|
||||
" if(u_lightParams[i].x == 0.0)\n"
|
||||
" break;\n"
|
||||
|
|
@ -120,6 +121,7 @@ const char *header_vert_src =
|
|||
"#endif\n"
|
||||
" ;\n"
|
||||
" }\n"
|
||||
"*/\n"
|
||||
" return color;\n"
|
||||
"}\n"
|
||||
|
||||
|
|
|
|||
9
vendor/librw/src/gl/shaders/im2d.vert
vendored
9
vendor/librw/src/gl/shaders/im2d.vert
vendored
|
|
@ -1,18 +1,17 @@
|
|||
uniform vec4 u_xform;
|
||||
|
||||
VSIN(ATTRIB_POS) vec4 in_pos;
|
||||
VSIN(ATTRIB_POS) vec4 in_pos;
|
||||
|
||||
VSOUT vec4 v_color;
|
||||
VSOUT vec2 v_tex0;
|
||||
VSOUT float v_fog;
|
||||
VSOUT vec3 v_tex0_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
gl_Position = in_pos;
|
||||
gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;
|
||||
v_fog = DoFog(gl_Position.w);
|
||||
v_tex0_fog.z = DoFog(gl_Position.w);
|
||||
gl_Position.xyz *= gl_Position.w;
|
||||
v_color = in_color;
|
||||
v_tex0 = in_tex0;
|
||||
v_tex0_fog.xy = in_tex0;
|
||||
}
|
||||
|
|
|
|||
9
vendor/librw/src/gl/shaders/im2d_gl.inc
vendored
9
vendor/librw/src/gl/shaders/im2d_gl.inc
vendored
|
|
@ -1,20 +1,19 @@
|
|||
const char *im2d_vert_src =
|
||||
"uniform vec4 u_xform;\n"
|
||||
|
||||
"VSIN(ATTRIB_POS) vec4 in_pos;\n"
|
||||
"VSIN(ATTRIB_POS) vec4 in_pos;\n"
|
||||
|
||||
"VSOUT vec4 v_color;\n"
|
||||
"VSOUT vec2 v_tex0;\n"
|
||||
"VSOUT float v_fog;\n"
|
||||
"VSOUT vec3 v_tex0_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
"{\n"
|
||||
" gl_Position = in_pos;\n"
|
||||
" gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;\n"
|
||||
" v_fog = DoFog(gl_Position.w);\n"
|
||||
" v_tex0_fog.z = DoFog(gl_Position.w);\n"
|
||||
" gl_Position.xyz *= gl_Position.w;\n"
|
||||
" v_color = in_color;\n"
|
||||
" v_tex0 = in_tex0;\n"
|
||||
" v_tex0_fog.xy = in_tex0;\n"
|
||||
"}\n"
|
||||
;
|
||||
|
|
|
|||
12
vendor/librw/src/gl/shaders/im3d.vert
vendored
12
vendor/librw/src/gl/shaders/im3d.vert
vendored
|
|
@ -1,16 +1,14 @@
|
|||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
|
||||
VSOUT vec4 v_color;
|
||||
VSOUT vec2 v_tex0;
|
||||
VSOUT float v_fog;
|
||||
VSOUT vec3 v_tex0_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
vec4 Vertex = u_world * vec4(in_pos, 1.0);
|
||||
vec4 CamVertex = u_view * Vertex;
|
||||
gl_Position = u_proj * CamVertex;
|
||||
gl_Position = u_proj * u_view * Vertex;
|
||||
v_color = in_color;
|
||||
v_tex0 = in_tex0;
|
||||
v_fog = DoFog(gl_Position.w);
|
||||
v_tex0_fog.xy = in_tex0;
|
||||
v_tex0_fog.z = DoFog(gl_Position.w);
|
||||
}
|
||||
|
|
|
|||
12
vendor/librw/src/gl/shaders/im3d_gl.inc
vendored
12
vendor/librw/src/gl/shaders/im3d_gl.inc
vendored
|
|
@ -1,18 +1,16 @@
|
|||
const char *im3d_vert_src =
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
|
||||
"VSOUT vec4 v_color;\n"
|
||||
"VSOUT vec2 v_tex0;\n"
|
||||
"VSOUT float v_fog;\n"
|
||||
"VSOUT vec3 v_tex0_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
"{\n"
|
||||
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||
" vec4 CamVertex = u_view * Vertex;\n"
|
||||
" gl_Position = u_proj * CamVertex;\n"
|
||||
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||
" v_color = in_color;\n"
|
||||
" v_tex0 = in_tex0;\n"
|
||||
" v_fog = DoFog(gl_Position.w);\n"
|
||||
" v_tex0_fog.xy = in_tex0;\n"
|
||||
" v_tex0_fog.z = DoFog(gl_Position.w);\n"
|
||||
"}\n"
|
||||
;
|
||||
|
|
|
|||
9
vendor/librw/src/gl/shaders/matfx_env.frag
vendored
9
vendor/librw/src/gl/shaders/matfx_env.frag
vendored
|
|
@ -8,20 +8,19 @@ uniform vec4 u_fxparams;
|
|||
|
||||
FSIN vec4 v_color;
|
||||
FSIN vec4 v_envColor;
|
||||
FSIN vec2 v_tex0;
|
||||
FSIN vec3 v_tex0_fog;
|
||||
FSIN vec2 v_tex1;
|
||||
FSIN float v_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
vec4 pass1 = v_color;
|
||||
pass1 *= texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||
pass1 *= texture(tex0, vec2(v_tex0_fog.x, 1.0-v_tex0_fog.y));
|
||||
|
||||
vec4 pass2 = v_envColor*shininess*texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));
|
||||
|
||||
pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_fog);
|
||||
pass2.rgb = mix(vec3(0.0, 0.0, 0.0), pass2.rgb, v_fog);
|
||||
pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_tex0_fog.z);
|
||||
pass2.rgb = mix(vec3(0.0, 0.0, 0.0), pass2.rgb, v_tex0_fog.z);
|
||||
|
||||
float fba = max(pass1.a, disableFBA);
|
||||
vec4 color;
|
||||
|
|
|
|||
9
vendor/librw/src/gl/shaders/matfx_env.vert
vendored
9
vendor/librw/src/gl/shaders/matfx_env.vert
vendored
|
|
@ -2,13 +2,12 @@ uniform mat4 u_texMatrix;
|
|||
uniform vec4 u_colorClamp;
|
||||
uniform vec4 u_envColor;
|
||||
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
|
||||
VSOUT vec4 v_color;
|
||||
VSOUT vec4 v_envColor;
|
||||
VSOUT vec2 v_tex0;
|
||||
VSOUT vec3 v_tex0_fog;
|
||||
VSOUT vec2 v_tex1;
|
||||
VSOUT float v_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
|
|
@ -17,7 +16,7 @@ main(void)
|
|||
gl_Position = u_proj * u_view * Vertex;
|
||||
vec3 Normal = mat3(u_world) * in_normal;
|
||||
|
||||
v_tex0 = in_tex0;
|
||||
v_tex0_fog.xy = in_tex0;
|
||||
v_tex1 = (u_texMatrix * vec4(Normal, 1.0)).xy;
|
||||
|
||||
v_color = in_color;
|
||||
|
|
@ -27,5 +26,5 @@ main(void)
|
|||
v_envColor = max(v_color, u_colorClamp) * u_envColor;
|
||||
v_color *= u_matColor;
|
||||
|
||||
v_fog = DoFog(gl_Position.w);
|
||||
v_tex0_fog.z = DoFog(gl_Position.w);
|
||||
}
|
||||
|
|
|
|||
18
vendor/librw/src/gl/shaders/matfx_gl.inc
vendored
18
vendor/librw/src/gl/shaders/matfx_gl.inc
vendored
|
|
@ -3,13 +3,12 @@ const char *matfx_env_vert_src =
|
|||
"uniform vec4 u_colorClamp;\n"
|
||||
"uniform vec4 u_envColor;\n"
|
||||
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
|
||||
"VSOUT vec4 v_color;\n"
|
||||
"VSOUT vec4 v_envColor;\n"
|
||||
"VSOUT vec2 v_tex0;\n"
|
||||
"VSOUT vec3 v_tex0_fog;\n"
|
||||
"VSOUT vec2 v_tex1;\n"
|
||||
"VSOUT float v_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
|
|
@ -18,7 +17,7 @@ const char *matfx_env_vert_src =
|
|||
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||
|
||||
" v_tex0 = in_tex0;\n"
|
||||
" v_tex0_fog.xy = in_tex0;\n"
|
||||
" v_tex1 = (u_texMatrix * vec4(Normal, 1.0)).xy;\n"
|
||||
|
||||
" v_color = in_color;\n"
|
||||
|
|
@ -28,7 +27,7 @@ const char *matfx_env_vert_src =
|
|||
" v_envColor = max(v_color, u_colorClamp) * u_envColor;\n"
|
||||
" v_color *= u_matColor;\n"
|
||||
|
||||
" v_fog = DoFog(gl_Position.w);\n"
|
||||
" v_tex0_fog.z = DoFog(gl_Position.w);\n"
|
||||
"}\n"
|
||||
;
|
||||
const char *matfx_env_frag_src =
|
||||
|
|
@ -42,20 +41,19 @@ const char *matfx_env_frag_src =
|
|||
|
||||
"FSIN vec4 v_color;\n"
|
||||
"FSIN vec4 v_envColor;\n"
|
||||
"FSIN vec2 v_tex0;\n"
|
||||
"FSIN vec3 v_tex0_fog;\n"
|
||||
"FSIN vec2 v_tex1;\n"
|
||||
"FSIN float v_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
"{\n"
|
||||
" vec4 pass1 = v_color;\n"
|
||||
" pass1 *= texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||
" pass1 *= texture(tex0, vec2(v_tex0_fog.x, 1.0-v_tex0_fog.y));\n"
|
||||
|
||||
" vec4 pass2 = v_envColor*shininess*texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));\n"
|
||||
|
||||
" pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_fog);\n"
|
||||
" pass2.rgb = mix(vec3(0.0, 0.0, 0.0), pass2.rgb, v_fog);\n"
|
||||
" pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_tex0_fog.z);\n"
|
||||
" pass2.rgb = mix(vec3(0.0, 0.0, 0.0), pass2.rgb, v_tex0_fog.z);\n"
|
||||
|
||||
" float fba = max(pass1.a, disableFBA);\n"
|
||||
" vec4 color;\n"
|
||||
|
|
|
|||
7
vendor/librw/src/gl/shaders/simple.frag
vendored
7
vendor/librw/src/gl/shaders/simple.frag
vendored
|
|
@ -1,14 +1,13 @@
|
|||
uniform sampler2D tex0;
|
||||
|
||||
FSIN vec4 v_color;
|
||||
FSIN vec2 v_tex0;
|
||||
FSIN float v_fog;
|
||||
FSIN vec3 v_tex0_fog;
|
||||
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
vec4 color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
||||
vec4 color = v_color*texture2D(tex0, vec2(v_tex0_fog.x, 1.0 - v_tex0_fog.y));
|
||||
color.rgb = mix(u_fogColor.rgb, color.rgb, v_tex0_fog.z);
|
||||
DoAlphaTest(color.a);
|
||||
FRAGCOLOR(color);
|
||||
}
|
||||
|
|
|
|||
7
vendor/librw/src/gl/shaders/simple_fs_gl.inc
vendored
7
vendor/librw/src/gl/shaders/simple_fs_gl.inc
vendored
|
|
@ -2,14 +2,13 @@ const char *simple_frag_src =
|
|||
"uniform sampler2D tex0;\n"
|
||||
|
||||
"FSIN vec4 v_color;\n"
|
||||
"FSIN vec2 v_tex0;\n"
|
||||
"FSIN float v_fog;\n"
|
||||
"FSIN vec3 v_tex0_fog;\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
"{\n"
|
||||
" vec4 color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||
" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
|
||||
" vec4 color = v_color*texture2D(tex0, vec2(v_tex0_fog.x, 1.0 - v_tex0_fog.y));\n"
|
||||
" color.rgb = mix(u_fogColor.rgb, color.rgb, v_tex0_fog.z);\n"
|
||||
" DoAlphaTest(color.a);\n"
|
||||
" FRAGCOLOR(color);\n"
|
||||
"}\n"
|
||||
|
|
|
|||
43
vendor/librw/src/gl/shaders/skin.vert
vendored
43
vendor/librw/src/gl/shaders/skin.vert
vendored
|
|
@ -1,10 +1,37 @@
|
|||
uniform mat4 u_boneMatrices[64];
|
||||
uniform mat4 u_boneMatrices[24];
|
||||
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||
|
||||
VSOUT vec4 v_color;
|
||||
VSOUT vec2 v_tex0;
|
||||
VSOUT float v_fog;
|
||||
VSOUT vec3 v_tex0_fog;
|
||||
|
||||
mat4 getBoneMatrix(int idx) {
|
||||
if(idx == 0) return u_boneMatrices[0];
|
||||
if(idx == 1) return u_boneMatrices[1];
|
||||
if(idx == 2) return u_boneMatrices[2];
|
||||
if(idx == 3) return u_boneMatrices[3];
|
||||
if(idx == 4) return u_boneMatrices[4];
|
||||
if(idx == 5) return u_boneMatrices[5];
|
||||
if(idx == 6) return u_boneMatrices[6];
|
||||
if(idx == 7) return u_boneMatrices[7];
|
||||
if(idx == 8) return u_boneMatrices[8];
|
||||
if(idx == 9) return u_boneMatrices[9];
|
||||
if(idx == 10) return u_boneMatrices[10];
|
||||
if(idx == 11) return u_boneMatrices[11];
|
||||
if(idx == 12) return u_boneMatrices[12];
|
||||
if(idx == 13) return u_boneMatrices[13];
|
||||
if(idx == 14) return u_boneMatrices[14];
|
||||
if(idx == 15) return u_boneMatrices[15];
|
||||
if(idx == 16) return u_boneMatrices[16];
|
||||
if(idx == 17) return u_boneMatrices[17];
|
||||
if(idx == 18) return u_boneMatrices[18];
|
||||
if(idx == 19) return u_boneMatrices[19];
|
||||
if(idx == 20) return u_boneMatrices[20];
|
||||
if(idx == 21) return u_boneMatrices[21];
|
||||
if(idx == 22) return u_boneMatrices[22];
|
||||
if(idx == 23) return u_boneMatrices[23];
|
||||
return u_boneMatrices[0];
|
||||
}
|
||||
|
||||
void
|
||||
main(void)
|
||||
|
|
@ -12,15 +39,15 @@ main(void)
|
|||
vec3 SkinVertex = vec3(0.0, 0.0, 0.0);
|
||||
vec3 SkinNormal = vec3(0.0, 0.0, 0.0);
|
||||
for(int i = 0; i < 4; i++){
|
||||
SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];
|
||||
SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];
|
||||
SkinVertex += (getBoneMatrix(int(in_indices[i])) * vec4(in_pos, 1.0)).xyz * in_weights[i];
|
||||
SkinNormal += (mat3(getBoneMatrix(int(in_indices[i]))) * in_normal) * in_weights[i];
|
||||
}
|
||||
|
||||
vec4 Vertex = u_world * vec4(SkinVertex, 1.0);
|
||||
gl_Position = u_proj * u_view * Vertex;
|
||||
vec3 Normal = mat3(u_world) * SkinNormal;
|
||||
|
||||
v_tex0 = in_tex0;
|
||||
v_tex0_fog.xy = in_tex0;
|
||||
|
||||
v_color = in_color;
|
||||
v_color.rgb += u_ambLight.rgb*surfAmbient;
|
||||
|
|
@ -28,5 +55,5 @@ main(void)
|
|||
v_color = clamp(v_color, 0.0, 1.0);
|
||||
v_color *= u_matColor;
|
||||
|
||||
v_fog = DoFog(gl_Position.z);
|
||||
v_tex0_fog.z = DoFog(gl_Position.z);
|
||||
}
|
||||
|
|
|
|||
43
vendor/librw/src/gl/shaders/skin_gl.inc
vendored
43
vendor/librw/src/gl/shaders/skin_gl.inc
vendored
|
|
@ -1,11 +1,38 @@
|
|||
const char *skin_vert_src =
|
||||
"uniform mat4 u_boneMatrices[64];\n"
|
||||
"uniform mat4 u_boneMatrices[24];\n"
|
||||
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||
|
||||
"VSOUT vec4 v_color;\n"
|
||||
"VSOUT vec2 v_tex0;\n"
|
||||
"VSOUT float v_fog;\n"
|
||||
"VSOUT vec3 v_tex0_fog;\n"
|
||||
|
||||
"mat4 getBoneMatrix(int idx) {\n"
|
||||
" if(idx == 0) return u_boneMatrices[0];\n"
|
||||
" if(idx == 1) return u_boneMatrices[1];\n"
|
||||
" if(idx == 2) return u_boneMatrices[2];\n"
|
||||
" if(idx == 3) return u_boneMatrices[3];\n"
|
||||
" if(idx == 4) return u_boneMatrices[4];\n"
|
||||
" if(idx == 5) return u_boneMatrices[5];\n"
|
||||
" if(idx == 6) return u_boneMatrices[6];\n"
|
||||
" if(idx == 7) return u_boneMatrices[7];\n"
|
||||
" if(idx == 8) return u_boneMatrices[8];\n"
|
||||
" if(idx == 9) return u_boneMatrices[9];\n"
|
||||
" if(idx == 10) return u_boneMatrices[10];\n"
|
||||
" if(idx == 11) return u_boneMatrices[11];\n"
|
||||
" if(idx == 12) return u_boneMatrices[12];\n"
|
||||
" if(idx == 13) return u_boneMatrices[13];\n"
|
||||
" if(idx == 14) return u_boneMatrices[14];\n"
|
||||
" if(idx == 15) return u_boneMatrices[15];\n"
|
||||
" if(idx == 16) return u_boneMatrices[16];\n"
|
||||
" if(idx == 17) return u_boneMatrices[17];\n"
|
||||
" if(idx == 18) return u_boneMatrices[18];\n"
|
||||
" if(idx == 19) return u_boneMatrices[19];\n"
|
||||
" if(idx == 20) return u_boneMatrices[20];\n"
|
||||
" if(idx == 21) return u_boneMatrices[21];\n"
|
||||
" if(idx == 22) return u_boneMatrices[22];\n"
|
||||
" if(idx == 23) return u_boneMatrices[23];\n"
|
||||
" return u_boneMatrices[0];\n"
|
||||
"}\n"
|
||||
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
|
|
@ -13,15 +40,15 @@ const char *skin_vert_src =
|
|||
" vec3 SkinVertex = vec3(0.0, 0.0, 0.0);\n"
|
||||
" vec3 SkinNormal = vec3(0.0, 0.0, 0.0);\n"
|
||||
" for(int i = 0; i < 4; i++){\n"
|
||||
" SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];\n"
|
||||
" SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];\n"
|
||||
" SkinVertex += (getBoneMatrix(int(in_indices[i])) * vec4(in_pos, 1.0)).xyz * in_weights[i];\n"
|
||||
" SkinNormal += (mat3(getBoneMatrix(int(in_indices[i]))) * in_normal) * in_weights[i];\n"
|
||||
" }\n"
|
||||
|
||||
" vec4 Vertex = u_world * vec4(SkinVertex, 1.0);\n"
|
||||
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||
" vec3 Normal = mat3(u_world) * SkinNormal;\n"
|
||||
|
||||
" v_tex0 = in_tex0;\n"
|
||||
" v_tex0_fog.xy = in_tex0;\n"
|
||||
|
||||
" v_color = in_color;\n"
|
||||
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||
|
|
@ -29,6 +56,6 @@ const char *skin_vert_src =
|
|||
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||
" v_color *= u_matColor;\n"
|
||||
|
||||
" v_fog = DoFog(gl_Position.z);\n"
|
||||
" v_tex0_fog.z = DoFog(gl_Position.z);\n"
|
||||
"}\n"
|
||||
;
|
||||
|
|
|
|||
11
vendor/librw/src/gl/wdgl.cpp
vendored
11
vendor/librw/src/gl/wdgl.cpp
vendored
|
|
@ -13,9 +13,14 @@
|
|||
#include "../rwplugins.h"
|
||||
#include "rwwdgl.h"
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
#include <gles2/gl2.h>
|
||||
#include <gles2/gl2ext.h>
|
||||
#else
|
||||
#ifdef RW_OPENGL
|
||||
#include "glad/glad.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define PLUGIN_ID 2
|
||||
|
||||
|
|
@ -833,7 +838,11 @@ Texture::upload(void)
|
|||
|
||||
static GLenum wrap[] = {
|
||||
0, GL_REPEAT, GL_MIRRORED_REPEAT,
|
||||
#ifdef __SYMBIAN32__
|
||||
GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE
|
||||
#else
|
||||
GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER
|
||||
#endif
|
||||
};
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
|
||||
wrap[(this->filterAddressing >> 8) & 0xF]);
|
||||
|
|
@ -842,7 +851,7 @@ Texture::upload(void)
|
|||
|
||||
switch(r->format & 0xF00){
|
||||
case Raster::C8888:
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, 4, r->width, r->height,
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, r->width, r->height,
|
||||
0, GL_RGBA, GL_UNSIGNED_BYTE, r->pixels);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
5
vendor/librw/src/image.cpp
vendored
5
vendor/librw/src/image.cpp
vendored
|
|
@ -14,6 +14,7 @@
|
|||
#include "d3d/rwxbox.h"
|
||||
#include "d3d/rwd3d8.h"
|
||||
#include "d3d/rwd3d9.h"
|
||||
#include "fcaseopen.h"
|
||||
|
||||
#define PLUGIN_ID ID_IMAGE
|
||||
|
||||
|
|
@ -937,7 +938,7 @@ Image::getFilename(const char *name)
|
|||
if(g->numSearchPaths == 0){
|
||||
s = rwStrdup(name, MEMDUR_EVENT);
|
||||
makePath(s);
|
||||
f = fopen(s, "rb");
|
||||
f = fcaseopen(s, "rb");
|
||||
if(f){
|
||||
fclose(f);
|
||||
printf("found %s\n", s);
|
||||
|
|
@ -955,7 +956,7 @@ Image::getFilename(const char *name)
|
|||
strcpy(s, p);
|
||||
strcat(s, name);
|
||||
makePath(s);
|
||||
f = fopen(s, "r");
|
||||
f = fcaseopen(s, "r");
|
||||
if(f){
|
||||
fclose(f);
|
||||
printf("found %s\n", name);
|
||||
|
|
|
|||
24
vendor/librw/src/raster.cpp
vendored
24
vendor/librw/src/raster.cpp
vendored
|
|
@ -535,21 +535,21 @@ Raster::convertTexToCurrentPlatform(rw::Raster *ras)
|
|||
// TODO: maybe don't *always* do this?
|
||||
img->unpalettize();
|
||||
Raster::imageFindRasterFormat(img, Raster::TEXTURE, &width, &height, &depth, &format);
|
||||
format |= ras->format & (Raster::MIPMAP | Raster::AUTOMIPMAP);
|
||||
// format |= ras->format & (Raster::MIPMAP | Raster::AUTOMIPMAP);
|
||||
Raster *newras = Raster::create(width, height, depth, format);
|
||||
newras->setFromImage(img);
|
||||
img->destroy();
|
||||
int numLevels = ras->getNumLevels();
|
||||
for(int i = 1; i < numLevels; i++){
|
||||
ras->lock(i, Raster::LOCKREAD);
|
||||
img = ras->toImage();
|
||||
// TODO: maybe don't *always* do this?
|
||||
img->unpalettize();
|
||||
newras->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH);
|
||||
newras->setFromImage(img);
|
||||
newras->unlock(i);
|
||||
ras->unlock(i);
|
||||
}
|
||||
// int numLevels = ras->getNumLevels();
|
||||
// for(int i = 1; i < numLevels; i++){
|
||||
// ras->lock(i, Raster::LOCKREAD);
|
||||
// img = ras->toImage();
|
||||
// // TODO: maybe don't *always* do this?
|
||||
// img->unpalettize();
|
||||
// newras->lock(i, Raster::LOCKWRITE|Raster::LOCKNOFETCH);
|
||||
// newras->setFromImage(img);
|
||||
// newras->unlock(i);
|
||||
// ras->unlock(i);
|
||||
// }
|
||||
ras->destroy();
|
||||
ras = newras;
|
||||
return ras;
|
||||
|
|
|
|||
2
vendor/librw/src/rwanim.h
vendored
2
vendor/librw/src/rwanim.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
namespace rw {
|
||||
|
|
|
|||
6
vendor/librw/src/rwbase.h
vendored
6
vendor/librw/src/rwbase.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef RW_PS2
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
|
@ -6,6 +8,10 @@
|
|||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
#ifdef __SYMBIAN32__
|
||||
#define stderr stdout
|
||||
#endif
|
||||
|
||||
// TODO: clean up the opengl defines
|
||||
// and figure out what we even want here...
|
||||
#ifdef RW_GL3
|
||||
|
|
|
|||
2
vendor/librw/src/rwcharset.h
vendored
2
vendor/librw/src/rwcharset.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
struct Charset
|
||||
|
|
|
|||
2
vendor/librw/src/rwengine.h
vendored
2
vendor/librw/src/rwengine.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
// uhhhm..... why are these not actual functions?
|
||||
|
|
|
|||
2
vendor/librw/src/rwerror.h
vendored
2
vendor/librw/src/rwerror.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
struct Error
|
||||
|
|
|
|||
2
vendor/librw/src/rwobjects.h
vendored
2
vendor/librw/src/rwobjects.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
namespace rw {
|
||||
|
|
|
|||
2
vendor/librw/src/rwpipeline.h
vendored
2
vendor/librw/src/rwpipeline.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
struct Atomic;
|
||||
|
|
|
|||
2
vendor/librw/src/rwplg.h
vendored
2
vendor/librw/src/rwplg.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
#define PLUGINOFFSET(type, base, offset) \
|
||||
|
|
|
|||
2
vendor/librw/src/rwplugins.h
vendored
2
vendor/librw/src/rwplugins.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
/*
|
||||
|
|
|
|||
2
vendor/librw/src/rwrender.h
vendored
2
vendor/librw/src/rwrender.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
// Render states
|
||||
|
|
|
|||
2
vendor/librw/src/rwuserdata.h
vendored
2
vendor/librw/src/rwuserdata.h
vendored
|
|
@ -1,3 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
namespace rw {
|
||||
|
||||
enum UserDataType
|
||||
|
|
|
|||
2
vendor/librw/src/world.cpp
vendored
2
vendor/librw/src/world.cpp
vendored
|
|
@ -178,6 +178,7 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData)
|
|||
if(!normals)
|
||||
return;
|
||||
|
||||
Sphere *atomsphere = atomic->getWorldBoundingSphere();
|
||||
// TODO: for this we would use an atomic's world sectors, but we don't have those yet
|
||||
FORLIST(lnk, this->localLights){
|
||||
if(lightData->numLocals >= maxLocals)
|
||||
|
|
@ -188,7 +189,6 @@ World::enumerateLights(Atomic *atomic, WorldLights *lightData)
|
|||
continue;
|
||||
|
||||
// check if spheres are intersecting
|
||||
Sphere *atomsphere = atomic->getWorldBoundingSphere();
|
||||
V3d dist = sub(l->getFrame()->getLTM()->pos, atomsphere->center);
|
||||
if(length(dist) < atomsphere->radius + l->radius)
|
||||
lightData->locals[lightData->numLocals++] = l;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue