mirror of
https://gitlab.com/shinovon/re3-symbian.git
synced 2026-05-23 01:57:21 +03:00
Compare commits
No commits in common. "master" and "v1.0.2-alpha" have entirely different histories.
master
...
v1.0.2-alp
15 changed files with 24 additions and 78 deletions
10
README.md
10
README.md
|
|
@ -1,6 +1,7 @@
|
||||||
# re3-symbian
|
# re3-symbian
|
||||||
|
|
||||||
Work-in-progress port of GTA III for Symbian devices.
|
Work-in-progress port of GTA III for Symbian devices.\
|
||||||
|
Supports S60 3rd Edition FP1, S60 5th edition Symbian^3 and later.
|
||||||
|
|
||||||
Based on re3, uses some code from [Dreamcast](https://gitlab.com/skmp/dca3-game) and [Vita](https://github.com/Rinnegatamante/librw-vita) ports.
|
Based on re3, uses some code from [Dreamcast](https://gitlab.com/skmp/dca3-game) and [Vita](https://github.com/Rinnegatamante/librw-vita) ports.
|
||||||
|
|
||||||
|
|
@ -8,13 +9,6 @@ Based on re3, uses some code from [Dreamcast](https://gitlab.com/skmp/dca3-game)
|
||||||
|
|
||||||
See [TODO.md](/TODO.md) for more details on project state.
|
See [TODO.md](/TODO.md) for more details on project state.
|
||||||
|
|
||||||
## Device requirements
|
|
||||||
|
|
||||||
- S60 3rd Edition FP1, S60 5th Edition (non-Nokia), Symbian^3 or later
|
|
||||||
- GPU
|
|
||||||
- 128 MB RAM with at least 50 MB free (won't run on regular 64 MB N95 unless you disable all textures)
|
|
||||||
- Functional E: drive with 400 MB of free space (will be more as it'll start to support audio)
|
|
||||||
|
|
||||||
Tested devices:
|
Tested devices:
|
||||||
- Belle with BCM2763 (700) - GLES 2.0
|
- Belle with BCM2763 (700) - GLES 2.0
|
||||||
- Anna/Belle with BCM2727 (E7, N8, E6) - GLES 2.0
|
- Anna/Belle with BCM2727 (E7, N8, E6) - GLES 2.0
|
||||||
|
|
|
||||||
15
TODO.md
15
TODO.md
|
|
@ -10,20 +10,19 @@ Common:
|
||||||
- [x] Merge S60v3 and ^3 branches
|
- [x] Merge S60v3 and ^3 branches
|
||||||
- [ ] Simplify geometry
|
- [ ] Simplify geometry
|
||||||
- [ ] Move map to top left corner
|
- [ ] Move map to top left corner
|
||||||
- [ ] Too many draw calls
|
- [ ] Do something with sprites, they're still taking too much frame time
|
||||||
- [ ] Audio
|
- [ ] Audio
|
||||||
|
|
||||||
GLES 2.0 specific:
|
GLES 2.0 specific:
|
||||||
- [x] Optimize to always run 10+ fps
|
- [x] Optimize to always run 10+ fps
|
||||||
- [x] Fix skinning shader (cutscene heads require it)
|
- [x] Fix skinning shader (cutscene heads require it)
|
||||||
- [x] Fix face animations in optimized builds
|
|
||||||
- [x] Disappearing background in cutscenes
|
|
||||||
- [x] Huge lag spikes on VC4
|
|
||||||
- [x] Skinning shader is still broken on VC4
|
|
||||||
- [ ] Optimize to always run 20+ fps
|
- [ ] Optimize to always run 20+ fps
|
||||||
- [ ] Use etc1 compression
|
- [ ] Use etc1 compression
|
||||||
- [ ] HUD still disappearing sometimes on VC3
|
- [ ] Fix face animations in optimized builds
|
||||||
- [ ] Effects are slowing the render on VC4
|
- [ ] Skinning shader is still broken on VC4
|
||||||
|
- [ ] Disappearing background in cutscenes
|
||||||
|
- [ ] HUD still disappearing sometimes
|
||||||
|
- [ ] Huge lag spikes on VC4
|
||||||
|
|
||||||
GLES 1.1 specific:
|
GLES 1.1 specific:
|
||||||
- [x] Backport to STLport v4
|
- [x] Backport to STLport v4
|
||||||
|
|
@ -36,6 +35,6 @@ GLES 1.1 specific:
|
||||||
- [ ] Fix lighting
|
- [ ] Fix lighting
|
||||||
|
|
||||||
Issues:
|
Issues:
|
||||||
- [ ] Fix crash in Texture::destroy on exit
|
- [x] Fix crash in Texture::destroy on exit
|
||||||
- [x] Save menu is too slow
|
- [x] Save menu is too slow
|
||||||
- [x] Crash when picking up a bat
|
- [x] Crash when picking up a bat
|
||||||
|
|
|
||||||
|
|
@ -25,4 +25,4 @@ SOURCEPATH ../vendor/librw/src/ps2
|
||||||
SOURCE pds.cpp ps2.cpp ps2device.cpp ps2matfx.cpp ps2raster.cpp ps2skin.cpp
|
SOURCE pds.cpp ps2.cpp ps2device.cpp ps2matfx.cpp ps2raster.cpp ps2skin.cpp
|
||||||
SOURCEPATH ../vendor/librw/src
|
SOURCEPATH ../vendor/librw/src
|
||||||
SOURCE raster.cpp render.cpp skin.cpp texture.cpp tga.cpp tristrip.cpp userdata.cpp uvanim.cpp world.cpp
|
SOURCE raster.cpp render.cpp skin.cpp texture.cpp tga.cpp tristrip.cpp userdata.cpp uvanim.cpp world.cpp
|
||||||
SOURCE assert.cpp printf_stub.c
|
SOURCE assert.cpp
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#{"GTA III"},(0xe0d67647),1,0,3
|
#{"GTA III"},(0xe0d67647),1,0,2
|
||||||
|
|
||||||
[0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
|
[0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
|
||||||
[0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
|
[0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#{"GTA III"},(0xe0d67647),1,0,3
|
#{"GTA III"},(0xe0d67647),1,0,2
|
||||||
|
|
||||||
[0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
|
[0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
|
||||||
[0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
|
[0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
%{"nnproject"}
|
%{"nnproject"}
|
||||||
:"nnproject"
|
:"nnproject"
|
||||||
|
|
||||||
IF (NOT package(0x20009A80)) OR (NOT package(0x2002372A)) OR (NOT package(0x10282872)) ; old or missing openc
|
IF (NOT package(0x20009A80)) OR (NOT package(0x2002372A)) ; old or missing openc
|
||||||
"incompatible_openc.txt"-"", FT, FORCEABORT
|
"incompatible_openc.txt"-"", FT, FORCEABORT
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -394,9 +394,9 @@ enum Config {
|
||||||
#define USE_MEASUREMENTS_IN_METERS // makes game use meters instead of feet in script
|
#define USE_MEASUREMENTS_IN_METERS // makes game use meters instead of feet in script
|
||||||
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
||||||
#ifdef PC_MENU
|
#ifdef PC_MENU
|
||||||
# define MISSION_REPLAY // mobile feature
|
//# define MISSION_REPLAY // mobile feature
|
||||||
#endif
|
#endif
|
||||||
#define SIMPLIER_MISSIONS // apply simplifications from mobile
|
//#define SIMPLIER_MISSIONS // apply simplifications from mobile
|
||||||
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1403,10 +1403,10 @@ RenderScene(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
PUSH_RENDERGROUP("RenderScene");
|
PUSH_RENDERGROUP("RenderScene");
|
||||||
CClouds::Render();
|
// CClouds::Render();
|
||||||
DoRWRenderHorizon();
|
DoRWRenderHorizon();
|
||||||
CRenderer::RenderRoads();
|
CRenderer::RenderRoads();
|
||||||
CCoronas::RenderReflections();
|
// CCoronas::RenderReflections();
|
||||||
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE);
|
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE);
|
||||||
CRenderer::RenderEverythingBarRoads();
|
CRenderer::RenderEverythingBarRoads();
|
||||||
CRenderer::RenderBoats();
|
CRenderer::RenderBoats();
|
||||||
|
|
@ -1416,7 +1416,7 @@ RenderScene(void)
|
||||||
#ifndef SQUEEZE_PERFORMANCE
|
#ifndef SQUEEZE_PERFORMANCE
|
||||||
CRenderer::RenderVehiclesButNotBoats();
|
CRenderer::RenderVehiclesButNotBoats();
|
||||||
#endif
|
#endif
|
||||||
CWeather::RenderRainStreaks();
|
// CWeather::RenderRainStreaks();
|
||||||
POP_RENDERGROUP();
|
POP_RENDERGROUP();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -137,10 +137,10 @@ void
|
||||||
CSpecialFX::Render(void)
|
CSpecialFX::Render(void)
|
||||||
{
|
{
|
||||||
PUSH_RENDERGROUP("CSpecialFX::Render");
|
PUSH_RENDERGROUP("CSpecialFX::Render");
|
||||||
CMotionBlurStreaks::Render();
|
// CMotionBlurStreaks::Render();
|
||||||
CBulletTraces::Render();
|
CBulletTraces::Render();
|
||||||
CBrightLights::Render();
|
// CBrightLights::Render();
|
||||||
CShinyTexts::Render();
|
// CShinyTexts::Render();
|
||||||
CMoneyMessages::Render();
|
CMoneyMessages::Render();
|
||||||
#ifdef NEW_RENDERER
|
#ifdef NEW_RENDERER
|
||||||
if(!(gbNewRenderer && FredIsInFirstPersonCam()))
|
if(!(gbNewRenderer && FredIsInFirstPersonCam()))
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,6 @@ static bool spinning;
|
||||||
bool qwerty;
|
bool qwerty;
|
||||||
bool touch;
|
bool touch;
|
||||||
bool moreVram;
|
bool moreVram;
|
||||||
bool powervr;
|
|
||||||
|
|
||||||
void _InputTranslateShiftKeyUpDown(RsKeyCodes *rs) {
|
void _InputTranslateShiftKeyUpDown(RsKeyCodes *rs) {
|
||||||
}
|
}
|
||||||
|
|
@ -575,17 +574,6 @@ public:
|
||||||
|
|
||||||
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
|
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
|
||||||
|
|
||||||
const char* renderer = (const char *)glGetString(GL_RENDERER);
|
|
||||||
if (strstr(renderer, "MBX") || strstr(renderer, "SGX")) {
|
|
||||||
// use pvrtc
|
|
||||||
powervr = true;
|
|
||||||
} else if (strstr(renderer, "VideoCore")) {
|
|
||||||
// use etc1
|
|
||||||
} else {
|
|
||||||
User::Leave(KErrNotSupported);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
setlocale(LC_CTYPE, "C");
|
setlocale(LC_CTYPE, "C");
|
||||||
setlocale(LC_COLLATE, "C");
|
setlocale(LC_COLLATE, "C");
|
||||||
|
|
|
||||||
20
vendor/librw/src/gl/gl3immed.cpp
vendored
20
vendor/librw/src/gl/gl3immed.cpp
vendored
|
|
@ -118,11 +118,6 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
|
||||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, u));
|
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, u));
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_NORMAL);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_WEIGHTS);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_INDICES);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS1);
|
|
||||||
|
|
||||||
glDrawArrays(primTypeMap[primType], 0, numVertices);
|
glDrawArrays(primTypeMap[primType], 0, numVertices);
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_POS);
|
glDisableVertexAttribArray(ATTRIB_POS);
|
||||||
|
|
@ -156,11 +151,6 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
|
||||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, u));
|
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, u));
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_NORMAL);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_WEIGHTS);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_INDICES);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS1);
|
|
||||||
|
|
||||||
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_POS);
|
glDisableVertexAttribArray(ATTRIB_POS);
|
||||||
|
|
@ -231,11 +221,6 @@ im3DRenderPrimitive(PrimitiveType primType)
|
||||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u));
|
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u));
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_NORMAL);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_WEIGHTS);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_INDICES);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS1);
|
|
||||||
|
|
||||||
glDrawArrays(primTypeMap[primType], 0, num3DVertices);
|
glDrawArrays(primTypeMap[primType], 0, num3DVertices);
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_POS);
|
glDisableVertexAttribArray(ATTRIB_POS);
|
||||||
|
|
@ -260,11 +245,6 @@ im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndic
|
||||||
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
|
||||||
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u));
|
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u));
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_NORMAL);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_WEIGHTS);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_INDICES);
|
|
||||||
glDisableVertexAttribArray(ATTRIB_TEXCOORDS1);
|
|
||||||
|
|
||||||
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
|
||||||
|
|
||||||
glDisableVertexAttribArray(ATTRIB_POS);
|
glDisableVertexAttribArray(ATTRIB_POS);
|
||||||
|
|
|
||||||
5
vendor/librw/src/gl/gl3shader.cpp
vendored
5
vendor/librw/src/gl/gl3shader.cpp
vendored
|
|
@ -189,13 +189,8 @@ compileshader(GLenum type, const char **src, GLuint *shader)
|
||||||
glShaderSource(shdr, n, src, nil);
|
glShaderSource(shdr, n, src, nil);
|
||||||
glCompileShader(shdr);
|
glCompileShader(shdr);
|
||||||
glGetShaderiv(shdr, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(shdr, GL_COMPILE_STATUS, &success);
|
||||||
#ifdef _DEBUG
|
|
||||||
printShaderSource(src);
|
printShaderSource(src);
|
||||||
#endif
|
|
||||||
if(!success){
|
if(!success){
|
||||||
#ifndef _DEBUG
|
|
||||||
printShaderSource(src);
|
|
||||||
#endif
|
|
||||||
fprintf(stderr, "Error in %s shader\n",
|
fprintf(stderr, "Error in %s shader\n",
|
||||||
type == GL_VERTEX_SHADER ? "vertex" : "fragment");
|
type == GL_VERTEX_SHADER ? "vertex" : "fragment");
|
||||||
glGetShaderiv(shdr, GL_INFO_LOG_LENGTH, &len);
|
glGetShaderiv(shdr, GL_INFO_LOG_LENGTH, &len);
|
||||||
|
|
|
||||||
1
vendor/librw/src/gl/gl3skin.cpp
vendored
1
vendor/librw/src/gl/gl3skin.cpp
vendored
|
|
@ -342,6 +342,7 @@ skinClose(void *o, int32, int32)
|
||||||
void
|
void
|
||||||
initSkin(void)
|
initSkin(void)
|
||||||
{
|
{
|
||||||
|
if (moreVram) return; // TODO
|
||||||
u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, MAX_BONES);
|
u_boneMatrices = registerUniform("u_boneMatrices", UNIFORM_MAT4, MAX_BONES);
|
||||||
|
|
||||||
Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
Driver::registerPlugin(PLATFORM_GL3, 0, ID_SKIN,
|
||||||
|
|
|
||||||
2
vendor/librw/src/gl/shaders/skin.vert
vendored
2
vendor/librw/src/gl/shaders/skin.vert
vendored
|
|
@ -13,7 +13,7 @@ main(void)
|
||||||
SkinVertex += (u_boneMatrices[int(in_indices.x)] * vec4(in_pos, 1.0)).xyz * in_weights.x;
|
SkinVertex += (u_boneMatrices[int(in_indices.x)] * vec4(in_pos, 1.0)).xyz * in_weights.x;
|
||||||
SkinVertex += (u_boneMatrices[int(in_indices.y)] * vec4(in_pos, 1.0)).xyz * in_weights.y;
|
SkinVertex += (u_boneMatrices[int(in_indices.y)] * vec4(in_pos, 1.0)).xyz * in_weights.y;
|
||||||
SkinVertex += (u_boneMatrices[int(in_indices.z)] * vec4(in_pos, 1.0)).xyz * in_weights.z;
|
SkinVertex += (u_boneMatrices[int(in_indices.z)] * vec4(in_pos, 1.0)).xyz * in_weights.z;
|
||||||
//SkinVertex += (u_boneMatrices[int(in_indices.w)] * vec4(in_pos, 1.0)).xyz * in_weights.w;
|
SkinVertex += (u_boneMatrices[int(in_indices.w)] * vec4(in_pos, 1.0)).xyz * in_weights.w;
|
||||||
|
|
||||||
vec4 Vertex = u_world * vec4(SkinVertex, 1.0);
|
vec4 Vertex = u_world * vec4(SkinVertex, 1.0);
|
||||||
gl_Position = u_proj * u_view * Vertex;
|
gl_Position = u_proj * u_view * Vertex;
|
||||||
|
|
|
||||||
2
vendor/librw/src/gl/shaders/skin_gl.inc
vendored
2
vendor/librw/src/gl/shaders/skin_gl.inc
vendored
|
|
@ -14,7 +14,7 @@ const char *skin_vert_src =
|
||||||
" SkinVertex += (u_boneMatrices[int(in_indices.x)] * vec4(in_pos, 1.0)).xyz * in_weights.x;\n"
|
" SkinVertex += (u_boneMatrices[int(in_indices.x)] * vec4(in_pos, 1.0)).xyz * in_weights.x;\n"
|
||||||
" SkinVertex += (u_boneMatrices[int(in_indices.y)] * vec4(in_pos, 1.0)).xyz * in_weights.y;\n"
|
" SkinVertex += (u_boneMatrices[int(in_indices.y)] * vec4(in_pos, 1.0)).xyz * in_weights.y;\n"
|
||||||
" SkinVertex += (u_boneMatrices[int(in_indices.z)] * vec4(in_pos, 1.0)).xyz * in_weights.z;\n"
|
" SkinVertex += (u_boneMatrices[int(in_indices.z)] * vec4(in_pos, 1.0)).xyz * in_weights.z;\n"
|
||||||
" //SkinVertex += (u_boneMatrices[int(in_indices.w)] * vec4(in_pos, 1.0)).xyz * in_weights.w;\n"
|
" SkinVertex += (u_boneMatrices[int(in_indices.w)] * vec4(in_pos, 1.0)).xyz * in_weights.w;\n"
|
||||||
|
|
||||||
" vec4 Vertex = u_world * vec4(SkinVertex, 1.0);\n"
|
" vec4 Vertex = u_world * vec4(SkinVertex, 1.0);\n"
|
||||||
" gl_Position = u_proj * u_view * Vertex;\n"
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
|
|
||||||
11
vendor/librw/src/printf_stub.c
vendored
11
vendor/librw/src/printf_stub.c
vendored
|
|
@ -1,11 +0,0 @@
|
||||||
#ifndef _DEBUG
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
int printf(const char * __restrict s, ...) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int puts(const char *s) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue