Compare commits

...

24 commits

Author SHA1 Message Date
Dante Leoncini
67cd77edf8 I already fixed the issue where the heads appeared black during cutscenes. It seems it was a vertex color problem 2026-05-09 17:20:59 -03:00
Shinovon
4e180c1051 Update todo 2026-05-09 19:07:55 +05:00
Shinovon
0588e8866f Bump pkg version
forgot
2026-05-09 19:00:19 +05:00
Shinovon
d49730b827 Fix face animations
Caused by `--fpmode fast` optimization
2026-05-09 18:56:44 +05:00
Shinovon
fa4776192b Add resources in pkg 2026-05-09 18:10:08 +05:00
Shinovon
124ea7befd something 2026-05-09 04:15:27 +05:00
Shinovon
5f33056f5a Fix build config 2026-05-09 04:06:58 +05:00
Shinovon
0d9599fd52 Use vfpv2 instead of softvfp+vfpv2 2026-05-08 20:46:20 +05:00
Shinovon
e81dbee77a Enable bullet traces 2026-05-08 20:36:41 +05:00
Shinovon
baa6d4e1c2 something 2026-05-08 06:09:41 +05:00
Shinovon
85d6e68889 Try to fix compilation 2026-05-08 05:59:16 +05:00
Shinovon
e392f442b6 Fix 2026-05-08 05:24:57 +05:00
Shinovon
48cb957c03 Update todo 2026-05-08 03:54:20 +05:00
Shinovon
aa1ca0e884 Add more key mappings 2026-05-08 03:19:48 +05:00
Shinovon
e925093323 Update todo 2026-05-08 03:09:05 +05:00
Shinovon
8092ab707f Update todo 2026-05-08 03:07:20 +05:00
Shinovon
11a958b643 Resize handler 2026-05-07 20:26:36 +05:00
Shinovon
1247cd5013 Enable classic control by default 2026-05-07 20:00:16 +05:00
Shinovon
3899270fa3 some 2026-05-07 19:53:01 +05:00
Shinovon
b1eaa2fcdf Fix 2026-05-07 19:34:24 +05:00
Shinovon
9ae42063f8 Hide controller hud on keyboard presses 2026-05-07 19:18:31 +05:00
Shinovon
52b026b689 Add L3 and R3 2026-05-07 19:00:54 +05:00
Shinovon
00eb422ee4 Update todo 2026-05-07 08:22:22 +05:00
Shinovon
301498e09e Use ram pointers instead of vbo in gl1immed 2026-05-07 07:55:39 +05:00
24 changed files with 179 additions and 152 deletions

13
TODO.md
View file

@ -3,15 +3,15 @@ Common:
- [x] Window implementation - [x] Window implementation
- [x] Fix shader compilation - [x] Fix shader compilation
- [x] Downscale textures - [x] Downscale textures
- [ ] Simplify geometry
- [x] Touch controls - [x] Touch controls
- [x] Keyboard controls - [x] Keyboard controls
- [ ] Audio?
- [x] Menu - [x] Menu
- [x] Config - [x] Config
- [x] Merge S60v3 and ^3 branches - [x] Merge S60v3 and ^3 branches
- [ ] Simplify geometry
- [ ] Move map to top left corner - [ ] Move map to top left corner
- [ ] Do something with sprites, they're still taking too much frame time - [ ] Do something with sprites, they're still taking too much frame time
- [ ] Audio
GLES 2.0 specific: GLES 2.0 specific:
- [x] Optimize to always run 10+ fps - [x] Optimize to always run 10+ fps
@ -19,15 +19,20 @@ GLES 2.0 specific:
- [ ] Optimize to always run 20+ fps - [ ] Optimize to always run 20+ fps
- [ ] Use etc1 compression - [ ] Use etc1 compression
- [ ] Fix face animations in optimized builds - [ ] Fix face animations in optimized builds
- [ ] Skinning shader is still broken on VC4
- [ ] Disappearing background in cutscenes
- [ ] HUD still disappearing sometimes
GLES 1.1 specific: GLES 1.1 specific:
- [x] Backport to STLport v4 - [x] Backport to STLport v4
- [x] GLES 1.1 engine - [x] GLES 1.1 engine
- [ ] Keyboard mappings for both QWERTY/12-keys - [x] Keyboard mappings for both QWERTY/12-keys
- [ ] Use pvrtc compression - [ ] Use pvrtc compression
- [ ] Optimize to always run 10+ fps
- [ ] Fix z-buffer issues (world clips through hud)
- [ ] Fix lighting
Issues: Issues:
- [x] 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] HUD disappearing on GLES 2.0 (mostly fixed, was caused by OOM)
- [x] Crash when picking up a bat - [x] Crash when picking up a bat

View file

@ -2,6 +2,7 @@ PRJ_PLATFORMS
DEFAULT ARMV6 DEFAULT ARMV6
PRJ_MMPFILES PRJ_MMPFILES
gnumakefile Icons_scalable_dc.mk
gnumakefile shaders.mk gnumakefile shaders.mk
librw_gles2.mmp librw_gles2.mmp
re3_gles2.mmp re3_gles2.mmp

View file

@ -17,8 +17,9 @@ SRCDBG
OPTION ARMCC --gnu -Otime --diag_suppress 1,68,111,174,381,1293 OPTION ARMCC --gnu -Otime --diag_suppress 1,68,111,174,381,1293
OPTION_REPLACE ARMCC --cpu 6 OPTION_REPLACE ARMCC --cpu 6
OPTION_REPLACE ARMCC --fpu softvfp+vfpv2 --fpmode fast OPTION_REPLACE ARMCC --fpu vfpv2 --fpmode fast
OPTION_REPLACE ARMCC -O2 -O3 // too dangerous! // too dangerous!
OPTION_REPLACE ARMCC -O2 -O3
#ifdef ARMCC #ifdef ARMCC
ALWAYS_BUILD_AS_ARM ALWAYS_BUILD_AS_ARM
#endif #endif
@ -27,10 +28,10 @@ ALWAYS_BUILD_AS_ARM
SYSTEMINCLUDE /epoc32/include/stdapis/stlportv5 SYSTEMINCLUDE /epoc32/include/stdapis/stlportv5
STDCPP STDCPP
MACRO RW_GL3 MACRO RW_GL3
MACRO RW_OPENGL // because carbide is too stupid MACRO RW_OPENGL
#else #else
SYSTEMINCLUDE /epoc32/include/stdapis/stlport SYSTEMINCLUDE /epoc32/include/stdapis/stlport
SYSTEMINCLUDE /epoc32/include/stdapis/stlport/stl SYSTEMINCLUDE /epoc32/include/stdapis/stlport/stl
MACRO RW_GLES1 MACRO RW_GLES1
MACRO S60V5 MACRO S60V3
#endif #endif

View file

@ -1,4 +1,3 @@
#undef SYMBIAN3 #undef SYMBIAN3
#define S60V3
TARGET librw_gles1.lib TARGET librw_gles1.lib
#include "librw.mmh" #include "librw.mmh"

View file

@ -1,4 +1,3 @@
#undef S60V3
#define SYMBIAN_3 #define SYMBIAN_3
TARGET librw_gles2.lib TARGET librw_gles2.lib
#include "librw.mmh" #include "librw.mmh"

View file

@ -1,5 +1,4 @@
#undef SYMBIAN_3 #undef SYMBIAN_3
#define S60V3
//TARGET re3_gles1.exe //TARGET re3_gles1.exe
TARGET re3_gles1.exe TARGET re3_gles1.exe
LIBRARY libstdcpp.lib LIBRARY libstdcpp.lib

View file

@ -1,4 +1,3 @@
#undef S60V3
#define SYMBIAN_3 #define SYMBIAN_3
TARGET re3.exe TARGET re3.exe
LIBRARY libstdcppv5.lib LIBRARY libstdcppv5.lib
@ -6,5 +5,6 @@ LIBRARY libglesv2.lib
LIBRARY libegl.lib LIBRARY libegl.lib
LIBRARY platformver.lib LIBRARY platformver.lib
STATICLIBRARY librw_gles2.lib STATICLIBRARY librw_gles2.lib
ARMFPU softvfp+vfpv2 ARMFPU vfpv2
SMPSAFE
#include "re3.mmh" #include "re3.mmh"

View file

@ -1,22 +1,26 @@
#{"GTA III"},(0xe0d67647),1,0,0 #{"GTA III"},(0xe0d67647),1,0,1
[0x101F7961], 0, 0, 0, {"S60ProductID"} [0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
[0x1028315F], 0, 0, 0, {"S60ProductID"} [0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
[0x20022E6D], 0, 0, 0, {"S60ProductID"} [0x20022E6D], 0, 0, 0, {"S60ProductID"} ; ^3
%{"nnproject"} %{"nnproject"}
:"nnproject" :"nnproject"
;IF (NOT package(0x20009A80)) OR (NOT package(0x2002372A)) ; old or missing openc
; "incompatible_openc.txt"-"", FT, FORCEABORT
;ENDIF
;IF exists("z:\system\install\Series60v5.2.sis") AND exists("z:\sys\bin\libGLESv2.dll")
; "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3.exe"-"!:\sys\bin\re3.exe"
;ELSE
; "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3_gles1.exe"-"!:\sys\bin\re3.exe"
;ENDIF
"$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3_gles1.exe"-"!:\sys\bin\re3.exe" "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3_gles1.exe"-"!:\sys\bin\re3.exe"
"$(EPOCROOT)\epoc32\data\z\private\10003a3f\import\apps\re3_reg.rsc" - "!:\private\10003a3f\import\apps\re3_reg.rsc" "$(EPOCROOT)\epoc32\data\z\private\10003a3f\import\apps\re3_reg.rsc" - "!:\private\10003a3f\import\apps\re3_reg.rsc"
"$(EPOCROOT)\epoc32\data\z\resource\apps\re3.rsc" - "!:\resource\apps\re3.rsc" "$(EPOCROOT)\epoc32\data\z\resource\apps\re3.rsc" - "!:\resource\apps\re3.rsc"
"$(EPOCROOT)\epoc32\data\z\resource\apps\re3_icon.mif" - "!:\resource\apps\re3_icon.mif" "$(EPOCROOT)\epoc32\data\z\resource\apps\re3_icon.mif" - "!:\resource\apps\re3_icon.mif"
"..\gamefiles\data\PARTICLE.CFG" - "E:\data\gta3\data\PARTICLE.CFG"
"..\gamefiles\models\fonts_j.txd" - "E:\data\gta3\models\fonts_j.txd"
"..\gamefiles\models\fonts_p.txd" - "E:\data\gta3\models\fonts_p.txd"
"..\gamefiles\models\fonts_r.txd" - "E:\data\gta3\models\fonts_r.txd"
"..\gamefiles\TEXT\american.gxt" - "E:\data\gta3\TEXT\american.gxt"
"..\gamefiles\TEXT\english.gxt" - "E:\data\gta3\TEXT\english.gxt"
"..\gamefiles\TEXT\french.gxt" - "E:\data\gta3\TEXT\french.gxt"
"..\gamefiles\TEXT\german.gxt" - "E:\data\gta3\TEXT\german.gxt"
"..\gamefiles\TEXT\italian.gxt" - "E:\data\gta3\TEXT\italian.gxt"
"..\gamefiles\TEXT\JAPANESE.gxt" - "E:\data\gta3\TEXT\JAPANESE.gxt"
"..\gamefiles\TEXT\polish.gxt" - "E:\data\gta3\TEXT\polish.gxt"
"..\gamefiles\TEXT\spanish.gxt" - "E:\data\gta3\TEXT\spanish.gxt"

View file

@ -1,8 +1,8 @@
#{"GTA III"},(0xe0d67647),1,0,0 #{"GTA III"},(0xe0d67647),1,0,1
[0x101F7961], 0, 0, 0, {"S60ProductID"} [0x101F7961], 0, 0, 0, {"S60ProductID"} ; S60v3
[0x1028315F], 0, 0, 0, {"S60ProductID"} [0x1028315F], 0, 0, 0, {"S60ProductID"} ; ^1
[0x20022E6D], 0, 0, 0, {"S60ProductID"} [0x20022E6D], 0, 0, 0, {"S60ProductID"} ; ^3
%{"nnproject"} %{"nnproject"}
:"nnproject" :"nnproject"
@ -11,12 +11,24 @@ IF (NOT package(0x20009A80)) OR (NOT package(0x2002372A)) ; old or missing openc
"incompatible_openc.txt"-"", FT, FORCEABORT "incompatible_openc.txt"-"", FT, FORCEABORT
ENDIF ENDIF
IF exists("z:\system\install\Series60v5.2.sis") AND exists("z:\sys\bin\libGLESv2.dll") IF exists("z:\system\install\Series60v5.2.sis") AND exists("z:\sys\bin\libGLESv2.dll") ; ^3
"$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3.exe"-"!:\sys\bin\re3.exe" "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3.exe"-"!:\sys\bin\re3.exe"
ELSE ELSE ; everything else
"$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3_gles1.exe"-"!:\sys\bin\re3.exe" "$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3_gles1.exe"-"!:\sys\bin\re3.exe"
ENDIF ENDIF
;"$(EPOCROOT)epoc32\release\$(PLATFORM)\$(TARGET)\re3.exe"-"!:\sys\bin\re3.exe"
"$(EPOCROOT)\epoc32\data\z\private\10003a3f\import\apps\re3_reg.rsc" - "!:\private\10003a3f\import\apps\re3_reg.rsc" "$(EPOCROOT)\epoc32\data\z\private\10003a3f\import\apps\re3_reg.rsc" - "!:\private\10003a3f\import\apps\re3_reg.rsc"
"$(EPOCROOT)\epoc32\data\z\resource\apps\re3.rsc" - "!:\resource\apps\re3.rsc" "$(EPOCROOT)\epoc32\data\z\resource\apps\re3.rsc" - "!:\resource\apps\re3.rsc"
"$(EPOCROOT)\epoc32\data\z\resource\apps\re3_icon.mif" - "!:\resource\apps\re3_icon.mif" "$(EPOCROOT)\epoc32\data\z\resource\apps\re3_icon.mif" - "!:\resource\apps\re3_icon.mif"
"..\gamefiles\data\PARTICLE.CFG" - "E:\data\gta3\data\PARTICLE.CFG"
"..\gamefiles\models\fonts_j.txd" - "E:\data\gta3\models\fonts_j.txd"
"..\gamefiles\models\fonts_p.txd" - "E:\data\gta3\models\fonts_p.txd"
"..\gamefiles\models\fonts_r.txd" - "E:\data\gta3\models\fonts_r.txd"
"..\gamefiles\TEXT\american.gxt" - "E:\data\gta3\TEXT\american.gxt"
"..\gamefiles\TEXT\english.gxt" - "E:\data\gta3\TEXT\english.gxt"
"..\gamefiles\TEXT\french.gxt" - "E:\data\gta3\TEXT\french.gxt"
"..\gamefiles\TEXT\german.gxt" - "E:\data\gta3\TEXT\german.gxt"
"..\gamefiles\TEXT\italian.gxt" - "E:\data\gta3\TEXT\italian.gxt"
"..\gamefiles\TEXT\JAPANESE.gxt" - "E:\data\gta3\TEXT\JAPANESE.gxt"
"..\gamefiles\TEXT\polish.gxt" - "E:\data\gta3\TEXT\polish.gxt"
"..\gamefiles\TEXT\spanish.gxt" - "E:\data\gta3\TEXT\spanish.gxt"

View file

@ -3689,6 +3689,7 @@ const char* controllerTypesPaths[] = {
void void
CMenuManager::LoadController(int8 type) CMenuManager::LoadController(int8 type)
{ {
#ifdef BUTTON_ICONS
switch (type) switch (type)
{ {
case CONTROLLER_DUALSHOCK2: case CONTROLLER_DUALSHOCK2:
@ -3703,6 +3704,7 @@ CMenuManager::LoadController(int8 type)
CFont::LoadButtons("MODELS/X360BTNS.TXD"); CFont::LoadButtons("MODELS/X360BTNS.TXD");
break; break;
} }
#endif
// Unload current textures // Unload current textures
for (int i = FE_CONTROLLER; i <= FE_ARROWS4; i++) for (int i = FE_CONTROLLER; i <= FE_ARROWS4; i++)
@ -5140,6 +5142,9 @@ CMenuManager::ProcessButtonPresses(void)
ControlsManager.MakeControllerActionsBlank(); ControlsManager.MakeControllerActionsBlank();
ControlsManager.InitDefaultControlConfiguration(); ControlsManager.InitDefaultControlConfiguration();
ControlsManager.InitDefaultControlConfigMouse(MousePointerStateHelper.GetMouseSetUp()); ControlsManager.InitDefaultControlConfigMouse(MousePointerStateHelper.GetMouseSetUp());
#if defined __SYMBIAN32__
m_ControlMethod = CONTROL_CLASSIC;
#else
#if !defined RW_GL3 && !defined RW_GLES1 #if !defined RW_GL3 && !defined RW_GLES1
if (AllValidWinJoys.m_aJoys[JOYSTICK1].m_bInitialised) { if (AllValidWinJoys.m_aJoys[JOYSTICK1].m_bInitialised) {
DIDEVCAPS devCaps; DIDEVCAPS devCaps;
@ -5147,8 +5152,6 @@ CMenuManager::ProcessButtonPresses(void)
PSGLOBAL(joy1)->GetCapabilities(&devCaps); PSGLOBAL(joy1)->GetCapabilities(&devCaps);
ControlsManager.InitDefaultControlConfigJoyPad(devCaps.dwButtons); ControlsManager.InitDefaultControlConfigJoyPad(devCaps.dwButtons);
} }
#elif defined __SYMBIAN32__
// TODO
#else #else
if (PSGLOBAL(joy1id) != -1 && glfwJoystickPresent(PSGLOBAL(joy1id))) { if (PSGLOBAL(joy1id) != -1 && glfwJoystickPresent(PSGLOBAL(joy1id))) {
int count; int count;
@ -5157,6 +5160,7 @@ CMenuManager::ProcessButtonPresses(void)
} }
#endif #endif
m_ControlMethod = CONTROL_STANDARD; m_ControlMethod = CONTROL_STANDARD;
#endif
#ifdef FIX_BUGS #ifdef FIX_BUGS
MousePointerStateHelper.bInvertVertically = true; MousePointerStateHelper.bInvertVertically = true;
TheCamera.m_fMouseAccelVertical = 0.003f; TheCamera.m_fMouseAccelVertical = 0.003f;

View file

@ -16,7 +16,8 @@
#include "Renderer.h" #include "Renderer.h"
#if defined __ARMCC_VERSION && !defined _DEBUG #if defined __ARMCC_VERSION && !defined _DEBUG
#pragma O2 // fixes crash // fixes crash
#pragma O2
#endif #endif
int32 CCullZones::NumCullZones; int32 CCullZones::NumCullZones;

View file

@ -342,7 +342,7 @@ enum Config {
#define ALT_DODO_CHEAT #define ALT_DODO_CHEAT
#define REGISTER_START_BUTTON #define REGISTER_START_BUTTON
#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls #define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls
#define BUTTON_ICONS // use textures to show controller buttons //#define BUTTON_ICONS // use textures to show controller buttons
// Hud, frontend and radar // Hud, frontend and radar
//#define PS2_HUD //#define PS2_HUD

View file

@ -1448,17 +1448,21 @@ RenderEffects(void)
CGlass::Render(); CGlass::Render();
CWaterCannons::Render(); CWaterCannons::Render();
CSpecialFX::Render(); CSpecialFX::Render();
// CShadows::RenderStaticShadows(); #ifdef RW_GLES1
// CShadows::RenderStoredShadows(); CShadows::RenderStaticShadows();
// CSkidmarks::Render(); CShadows::RenderStoredShadows();
// CAntennas::Render(); CSkidmarks::Render();
// CRubbish::Render(); CAntennas::Render();
// CCoronas::Render(); CRubbish::Render();
CCoronas::Render();
#endif
CParticle::Render(); CParticle::Render();
CPacManPickups::Render(); CPacManPickups::Render();
// CWeaponEffects::Render(); #ifdef RW_GLES1
// CPointLights::RenderFogEffect(); CWeaponEffects::Render();
// CMovingThings::Render(); CPointLights::RenderFogEffect();
CMovingThings::Render();
#endif
CRenderer::RenderFirstPersonVehicle(); CRenderer::RenderFirstPersonVehicle();
POP_RENDERGROUP(); POP_RENDERGROUP();
} }

View file

@ -84,9 +84,6 @@ void tbEndTimer(Const char* name)
} }
assert(n != 1500); assert(n != 1500);
TimerBar.Timers[n].endTime = (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerFrame(); TimerBar.Timers[n].endTime = (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerFrame();
if (strcmp(name, "EndOfFrame")) {
endOfFrameTime = TimerBar.Timers[n].endTime - TimerBar.Timers[n].startTime;
}
} }
float Diag_GetFPS() float Diag_GetFPS()

View file

@ -80,7 +80,12 @@ void TransformPoints(CVuVector *out, int n, const CMatrix &mat, const RwV3d *in,
": : "r" (out) , "r" (n), "r" (&mat), "r" (in), "r" (stride): "memory"); ": : "r" (out) , "r" (n), "r" (&mat), "r" (in), "r" (stride): "memory");
#else #else
while(n--){ while(n--){
#ifdef S60V3
const RwV3d i = *in;
*out = mat * i;
#else
*out = mat * *in; *out = mat * *in;
#endif
in = (RwV3d*)((uint8*)in + stride); in = (RwV3d*)((uint8*)in + stride);
out++; out++;
} }
@ -110,7 +115,12 @@ void TransformPoints(CVuVector *out, int n, const CMatrix &mat, const CVuVector
": : "r" (out) , "r" (n), "r" (&mat) ,"r" (in): "memory"); ": : "r" (out) , "r" (n), "r" (&mat) ,"r" (in): "memory");
#else #else
while(n--){ while(n--){
#ifdef S60V3
const RwV3d i = *in;
*out = mat * i;
#else
*out = mat * *in; *out = mat * *in;
#endif
in++; in++;
out++; out++;
} }

View file

@ -1,5 +1,6 @@
#if defined __ARMCC_VERSION && !defined _DEBUG #if defined __ARMCC_VERSION && !defined _DEBUG
#pragma O2 // fixes crash // fixes crash
#pragma O2
#endif #endif
#include "common.h" #include "common.h"

View file

@ -1355,19 +1355,25 @@ void CHud::DrawAfterFade()
CSprite2d::DrawRect(CRECT(320 + 20, 286 + y, 60, 20), CRGBA(0, 0, 0, 128)); CSprite2d::DrawRect(CRECT(320 + 20, 286 + y, 60, 20), CRGBA(0, 0, 0, 128));
PRINT("start", 320 + 20, 290 + y, 60); PRINT("start", 320 + 20, 290 + y, 60);
// l3, r3
CSprite2d::DrawRect(CRECT(320 - 80, 254 + y, 60, 20), CRGBA(0, 0, 0, 128));
PRINT("L3", 320 - 80, 258 + y, 60);
CSprite2d::DrawRect(CRECT(320 + 20, 254 + y, 60, 20), CRGBA(0, 0, 0, 128));
PRINT("R3", 320 + 20, 258 + y, 60);
// dpad // dpad
CSprite2d::DrawRect(CRECT(0, 80 + y, w / 4, 120), CRGBA(0, 0, 0, 128)); CSprite2d::DrawRect(CRECT(0, 80 + y, w / 4, 120), CRGBA(0, 0, 0, 128));
PRINT("/\\", w / 8 - 15, 90 + y, 30); PRINT("\"", w / 8 - 15, 90 + y, 30);
PRINT("v", w / 8 - 15, 160 + y, 30); PRINT("v", w / 8 - 15, 160 + y, 30);
PRINT("<", w / 8 - 60, 125 + y, 30); PRINT("<", w / 8 - 60, 125 + y, 30);
PRINT(">", w / 8 + 30, 125 + y, 30); PRINT(">", w / 8 + 30, 125 + y, 30);
// abxy // abxy
CSprite2d::DrawRect(CRECT(w - w / 4, 80 + y, w / 4, 120), CRGBA(0, 0, 0, 128)); CSprite2d::DrawRect(CRECT(w - w / 4, 80 + y, w / 4, 120), CRGBA(0, 0, 0, 128));
PRINT("/\\", w - w / 8 - 15, 90 + y, 30); PRINT("\"", w - w / 8 - 15, 90 + y, 30);
PRINT("X", w - w / 8 - 15, 160 + y, 30); PRINT("X", w - w / 8 - 15, 160 + y, 30);
PRINT("[]", w - w / 8 - 60, 125 + y, 30); PRINT("[]", w - w / 8 - 60, 125 + y, 30);
PRINT("O", w - w / 8 + 30, 125 + y, 30); PRINT("|", w - w / 8 + 30, 125 + y, 30);
#undef PRINT #undef PRINT
#undef CRECT #undef CRECT
} }

View file

@ -138,7 +138,7 @@ 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();

View file

@ -71,6 +71,8 @@ const TUid KUidRE3 = {0xe0d67647};
#define JOY_L2 6 #define JOY_L2 6
#define JOY_R2 7 #define JOY_R2 7
#define JOY_BACK 8 #define JOY_BACK 8
#define JOY_L3 9
#define JOY_R3 10
#define JOY_START 11 #define JOY_START 11
#define JOY_DPAD_UP 12 #define JOY_DPAD_UP 12
#define JOY_DPAD_RIGHT 13 #define JOY_DPAD_RIGHT 13
@ -334,6 +336,9 @@ static int MapScanCode(TInt aScanCode, TInt aModifiers) {
case 'z': case 'z':
case 'Z': case 'Z':
case '1': case '1':
case EStdKeyDevice3:
case EStdKeyEnter:
case EStdKeyNkpEnter:
return JOY_B; return JOY_B;
case 'x': case 'x':
case 'X': case 'X':
@ -346,6 +351,7 @@ static int MapScanCode(TInt aScanCode, TInt aModifiers) {
case 's': case 's':
case 'S': case 'S':
case '3': case '3':
case EStdKeyBackspace:
return JOY_Y; return JOY_Y;
case '5': case '5':
@ -356,6 +362,10 @@ static int MapScanCode(TInt aScanCode, TInt aModifiers) {
return JOY_L2; return JOY_L2;
case '8': case '8':
return JOY_R2; return JOY_R2;
case '9':
return JOY_L3;
case '0':
return JOY_R3;
case EStdKeyDevice0: case EStdKeyDevice0:
return JOY_BACK; return JOY_BACK;
@ -410,7 +420,6 @@ public:
CMenuManager::m_bStartUpFrontEndRequested = true; CMenuManager::m_bStartUpFrontEndRequested = true;
container->gGameState = GS_FRONTEND; container->gGameState = GS_FRONTEND;
// container->gGameState = GS_INIT_PLAYING_GAME;
break; break;
case GS_FRONTEND: case GS_FRONTEND:
if (!ForegroundApp) break; if (!ForegroundApp) break;
@ -436,10 +445,9 @@ public:
TRACE("gGameState = GS_PLAYING_GAME;"); TRACE("gGameState = GS_PLAYING_GAME;");
break; break;
case GS_PLAYING_GAME: case GS_PLAYING_GAME:
if (!ForegroundApp) break; // float ms = (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerMillisecond();
float ms = (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerMillisecond(); if (RwInitialised && ForegroundApp) {
if ( RwInitialised ) { // if (!CMenuManager::m_PrefsFrameLimiter || (1000.0f / (float)RsGlobal.maxFPS) < ms)
if (!CMenuManager::m_PrefsFrameLimiter || (1000.0f / (float)RsGlobal.maxFPS) < ms)
RsEventHandler(rsIDLE, (void *)TRUE); RsEventHandler(rsIDLE, (void *)TRUE);
} }
break; break;
@ -507,13 +515,13 @@ public:
SetFocus(ETrue); SetFocus(ETrue);
#ifdef RW_GL3 #ifndef S60V3
Window().EnableAdvancedPointers(); Window().EnableAdvancedPointers();
#endif #endif
EnableDragEvents(); EnableDragEvents();
ActivateL(); ActivateL();
#ifdef RW_GL3 #ifndef S60V3
// VC4 check // VC4 check
VersionInfo::TPlatformVersion platformVersion; VersionInfo::TPlatformVersion platformVersion;
VersionInfo::GetVersion(platformVersion); VersionInfo::GetVersion(platformVersion);
@ -610,12 +618,13 @@ public:
} }
virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent) { virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent) {
touch = true;
int x = aPointerEvent.iPosition.iX; int x = aPointerEvent.iPosition.iX;
int y = aPointerEvent.iPosition.iY; int y = aPointerEvent.iPosition.iY;
int w = Size().iWidth; int w = Size().iWidth;
int h = Size().iHeight; int h = Size().iHeight;
if (h > 360) y += h - 360; if (h > 360) y = (y * 360) / 480;
// if (FrontEndMenuManager.m_bMenuActive) { // if (FrontEndMenuManager.m_bMenuActive) {
// PSGLOBAL(lastMousePos).x = x; // PSGLOBAL(lastMousePos).x = x;
@ -631,7 +640,7 @@ public:
// CCoeControl::HandlePointerEventL(aPointerEvent); // CCoeControl::HandlePointerEventL(aPointerEvent);
// return; // return;
// } // }
#ifdef RW_GL3 #ifndef S60V3
const TAdvancedPointerEvent* advpointer = aPointerEvent.AdvancedPointerEvent(); const TAdvancedPointerEvent* advpointer = aPointerEvent.AdvancedPointerEvent();
int i = advpointer != NULL ? advpointer->PointerNumber() : 0; int i = advpointer != NULL ? advpointer->PointerNumber() : 0;
#else #else
@ -676,7 +685,7 @@ public:
stickCenterX[i] = x; stickCenterX[i] = x;
stickCenterY[i] = y; stickCenterY[i] = y;
} }
} else if (y >= 280 && y <= 280 + 32) { } else if (y > 280 && y < 280 + 32) {
if (x > 320 - 80 && x < 320 - 20) { if (x > 320 - 80 && x < 320 - 20) {
// select // select
activeZone[i] = JOY_BACK + 1; activeZone[i] = JOY_BACK + 1;
@ -686,6 +695,14 @@ public:
activeZone[i] = JOY_START + 1; activeZone[i] = JOY_START + 1;
virtualButtons[JOY_START] = 1; virtualButtons[JOY_START] = 1;
} }
} else if (y > 280 - 32 && y < 280) {
if (x > 320 - 80 && x < 320 - 20) {
activeZone[i] = JOY_L3 + 1;
virtualButtons[JOY_L3] = 1;
} else if (x > 320 + 20 && x < 320 + 80) {
activeZone[i] = JOY_R3 + 1;
virtualButtons[JOY_R3] = 1;
}
} else if (y >= 80 && y <= 80 + 120) { } else if (y >= 80 && y <= 80 + 120) {
if (x < w / 4) { if (x < w / 4) {
// dpad // dpad
@ -763,6 +780,7 @@ public:
case EEventKeyUp: { case EEventKeyUp: {
TInt k = MapScanCode(aEvent.Key()->iScanCode, aEvent.Key()->iModifiers); TInt k = MapScanCode(aEvent.Key()->iScanCode, aEvent.Key()->iModifiers);
if (k == -1) break; if (k == -1) break;
touch = false;
virtualButtons[k] = aEvent.Type() == EEventKeyDown; virtualButtons[k] = aEvent.Type() == EEventKeyDown;
break; break;
} }
@ -770,6 +788,14 @@ public:
break; break;
} }
} }
void HandleResourceChange(TInt aType) {
switch (aType) {
case KEikDynamicLayoutVariantSwitch:
SetExtentToWholeScreen();
break;
}
}
}; };
class RE3AppUi : public CAknAppUi { class RE3AppUi : public CAknAppUi {

View file

@ -137,6 +137,9 @@ slerp(const Quat &q, const Quat &p, float32 a)
c = -c; c = -c;
q1 = negate(q1); q1 = negate(q1);
} }
if(c > 1.0f) {
c = 1.0f;
}
float32 phi = acosf(c); float32 phi = acosf(c);
if(phi > 0.00001f){ if(phi > 0.00001f){
float32 s = sinf(phi); float32 s = sinf(phi);
@ -547,7 +550,7 @@ Matrix::invertGeneral(Matrix *dst, const Matrix *src)
// get the determinant from that // get the determinant from that
det = src->up.x * dst->right.y + src->at.x * dst->right.z + dst->right.x * src->right.x; det = src->up.x * dst->right.y + src->at.x * dst->right.z + dst->right.x * src->right.x;
invdet = 1.0; invdet = 1.0;
if(det != 0.0f) if(fabsf(det) > 0.00001f)
invdet = 1.0f/det; invdet = 1.0f/det;
dst->right.x *= invdet; dst->right.x *= invdet;
dst->right.y *= invdet; dst->right.y *= invdet;
@ -570,7 +573,7 @@ Matrix::makeRotation(Matrix *dst, const V3d *axis, float32 angle)
{ {
// V3d v = normalize(*axis); // V3d v = normalize(*axis);
float32 len = dot(*axis, *axis); float32 len = dot(*axis, *axis);
if(len != 0.0f) len = 1.0f/sqrtf(len); if(len > 0.00001f) len = 1.0f/sqrtf(len);
V3d v = rw::scale(*axis, len); V3d v = rw::scale(*axis, len);
angle = angle*(float)M_PI/180.0f; angle = angle*(float)M_PI/180.0f;
float32 s = sinf(angle); float32 s = sinf(angle);

View file

@ -113,18 +113,10 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0); glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0);
glEnableVertexAttribArray(ATTRIB_COLOR); glEnableVertexAttribArray(ATTRIB_COLOR);
#ifdef __SYMBIAN32__
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, r)); glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, r));
#else
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, r));
#endif
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0); glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
#ifdef __SYMBIAN32__
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));
#else
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, u));
#endif
glDrawArrays(primTypeMap[primType], 0, numVertices); glDrawArrays(primTypeMap[primType], 0, numVertices);
@ -154,18 +146,10 @@ im2DRenderIndexedPrimitive(PrimitiveType primType,
glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0); glVertexAttribPointer(ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + 0);
glEnableVertexAttribArray(ATTRIB_COLOR); glEnableVertexAttribArray(ATTRIB_COLOR);
#ifdef __SYMBIAN32__
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, r)); glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + OFFSET_OF(Im2DVertex, r));
#else
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, r));
#endif
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0); glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
#ifdef __SYMBIAN32__
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));
#else
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im2DVertex), (uint8*)vertices + offsetof(Im2DVertex, u));
#endif
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices); glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
@ -232,18 +216,10 @@ im3DRenderPrimitive(PrimitiveType primType)
glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0); glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0);
glEnableVertexAttribArray(ATTRIB_COLOR); glEnableVertexAttribArray(ATTRIB_COLOR);
#ifdef __SYMBIAN32__
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r)); glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r));
#else
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, r));
#endif
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0); glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
#ifdef __SYMBIAN32__
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));
#else
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, u));
#endif
glDrawArrays(primTypeMap[primType], 0, num3DVertices); glDrawArrays(primTypeMap[primType], 0, num3DVertices);
@ -264,18 +240,10 @@ im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndic
glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0); glVertexAttribPointer(ATTRIB_POS, 3, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + 0);
glEnableVertexAttribArray(ATTRIB_COLOR); glEnableVertexAttribArray(ATTRIB_COLOR);
#ifdef __SYMBIAN32__
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r)); glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r));
#else
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, r));
#endif
glEnableVertexAttribArray(ATTRIB_TEXCOORDS0); glEnableVertexAttribArray(ATTRIB_TEXCOORDS0);
#ifdef __SYMBIAN32__
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));
#else
glVertexAttribPointer(ATTRIB_TEXCOORDS0, 2, GL_FLOAT, GL_FALSE, sizeof(Im3DVertex), (uint8*)currentIm3dVertices + offsetof(Im3DVertex, u));
#endif
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices); glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);

View file

@ -17,8 +17,6 @@
namespace rw { namespace rw {
namespace gles1 { namespace gles1 {
uint32 im2DVbo, im2DIbo;
static int primTypeMap[] = { static int primTypeMap[] = {
GL_POINTS, // invalid GL_POINTS, // invalid
GL_LINES, GL_LINES,
@ -32,15 +30,11 @@ static int primTypeMap[] = {
void void
openIm2D(void) openIm2D(void)
{ {
glGenBuffers(1, &im2DIbo);
glGenBuffers(1, &im2DVbo);
} }
void void
closeIm2D(void) closeIm2D(void)
{ {
glDeleteBuffers(1, &im2DIbo);
glDeleteBuffers(1, &im2DVbo);
} }
static Im2DVertex tmpprimbuf[3]; static Im2DVertex tmpprimbuf[3];
@ -70,15 +64,16 @@ im2DRenderPrimitive(PrimitiveType primType, void *vertices, int32 numVertices)
Camera *cam; Camera *cam;
cam = (Camera*)engine->currentCamera; cam = (Camera*)engine->currentCamera;
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo); glBindBuffer(GL_ARRAY_BUFFER, 0);
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im2DVertex), vertices, GL_DYNAMIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), (void*)0); glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), vertices);
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, r)); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, r)));
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, u)); glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, u)));
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPushMatrix(); glPushMatrix();
@ -110,18 +105,17 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType,
Camera *cam; Camera *cam;
cam = (Camera*)engine->currentCamera; cam = (Camera*)engine->currentCamera;
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im2DIbo); glBindBuffer(GL_ARRAY_BUFFER, 0);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*2, indices, GL_DYNAMIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, im2DVbo);
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im2DVertex), vertices, GL_DYNAMIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), (void*)0); glVertexPointer(3, GL_FLOAT, sizeof(Im2DVertex), vertices);
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, r)); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, r)));
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)OFFSET_OF(Im2DVertex, u)); glTexCoordPointer(2, GL_FLOAT, sizeof(Im2DVertex), (void*)((uint8*)vertices + OFFSET_OF(Im2DVertex, u)));
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPushMatrix(); glPushMatrix();
@ -133,7 +127,7 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType,
glLoadIdentity(); glLoadIdentity();
flushCache(); flushCache();
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, nil); glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glPopMatrix(); glPopMatrix();
@ -147,30 +141,17 @@ void im2DRenderIndexedPrimitive(PrimitiveType primType,
// Im3D // Im3D
static AttribDesc im3dattribDesc[3] = { static int32 num3DVertices;
{ ATTRIB_POS, GL_FLOAT, GL_FALSE, 3,
sizeof(Im3DVertex), 0 },
{ ATTRIB_COLOR, GL_UNSIGNED_BYTE, GL_TRUE, 4,
sizeof(Im3DVertex), OFFSET_OF(Im3DVertex, r) },
{ ATTRIB_TEXCOORDS0, GL_FLOAT, GL_FALSE, 2,
sizeof(Im3DVertex), OFFSET_OF(Im3DVertex, u) },
};
static uint32 im3DVbo, im3DIbo;
static int32 num3DVertices; // not actually needed here
static void* currentIm3dVertices; static void* currentIm3dVertices;
void void
openIm3D(void) openIm3D(void)
{ {
glGenBuffers(1, &im3DIbo);
glGenBuffers(1, &im3DVbo);
} }
void void
closeIm3D(void) closeIm3D(void)
{ {
glDeleteBuffers(1, &im3DIbo);
glDeleteBuffers(1, &im3DVbo);
} }
void void
@ -186,21 +167,23 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
if((flags & im3d::VERTEXUV) == 0) if((flags & im3d::VERTEXUV) == 0)
SetRenderStatePtr(TEXTURERASTER, nil); SetRenderStatePtr(TEXTURERASTER, nil);
glBindBuffer(GL_ARRAY_BUFFER, im3DVbo); currentIm3dVertices = vertices;
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(Im3DVertex), vertices, GL_DYNAMIC_DRAW);
num3DVertices = numVertices; num3DVertices = numVertices;
} }
void void
im3DRenderPrimitive(PrimitiveType primType) im3DRenderPrimitive(PrimitiveType primType)
{ {
glBindBuffer(GL_ARRAY_BUFFER, im3DVbo); glBindBuffer(GL_ARRAY_BUFFER, 0);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), (void*)0); glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), currentIm3dVertices);
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, r)); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r)));
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, u)); glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u)));
flushCache(); flushCache();
glDrawArrays(primTypeMap[primType], 0, num3DVertices); glDrawArrays(primTypeMap[primType], 0, num3DVertices);
@ -213,19 +196,20 @@ im3DRenderPrimitive(PrimitiveType primType)
void void
im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices) im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndices)
{ {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, im3DIbo); glBindBuffer(GL_ARRAY_BUFFER, 0);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*2, indices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, im3DVbo);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), (void*)0); glVertexPointer(3, GL_FLOAT, sizeof(Im3DVertex), currentIm3dVertices);
glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, r)); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, r)));
glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)OFFSET_OF(Im3DVertex, u)); glTexCoordPointer(2, GL_FLOAT, sizeof(Im3DVertex), (void*)((uint8*)currentIm3dVertices + OFFSET_OF(Im3DVertex, u)));
flushCache(); flushCache();
glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, nil); glDrawElements(primTypeMap[primType], numIndices, GL_UNSIGNED_SHORT, indices);
glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_COLOR_ARRAY);

View file

@ -33,6 +33,10 @@ skinRenderCB(Atomic *atomic, InstanceDataHeader *header)
InstanceData *inst = header->inst; InstanceData *inst = header->inst;
int32 n = header->numMeshes; int32 n = header->numMeshes;
//test rapido a ver si es la textura
glDisableClientState(GL_COLOR_ARRAY);
glColor4f(1,1,1,1);
while(n--){ while(n--){
m = inst->material; m = inst->material;
setMaterial(flags, m->color, m->surfaceProps); setMaterial(flags, m->color, m->surfaceProps);
@ -47,6 +51,7 @@ skinRenderCB(Atomic *atomic, InstanceDataHeader *header)
// skinInstanceCB: igual que defaultInstanceCB, sin pesos/indices // skinInstanceCB: igual que defaultInstanceCB, sin pesos/indices
// porque GLES1 no puede hacer skinning en GPU // porque GLES1 no puede hacer skinning en GPU
// aunque... capaz podemos hacerloc on el PowerVR y las extensiones
void void
skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance) skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
{ {

View file

@ -11,14 +11,12 @@
#ifdef __SYMBIAN32__ #ifdef __SYMBIAN32__
#undef stderr #undef stderr
#define stderr stdout #define stderr stdout
#endif
#ifdef OFFSET_OF #ifdef OFFSET_OF
#undef OFFSET_OF #undef OFFSET_OF
#endif #endif
#define OFFSET_OF(type, member) ((size_t)&(((type*)0)->member))
#define OFFSET_OF(type, member) \
((size_t)((char*)&(((type*)0)->member) - (char*)0))
#endif
// TODO: clean up the opengl defines // TODO: clean up the opengl defines
// and figure out what we even want here... // and figure out what we even want here...
@ -562,7 +560,7 @@ enum Platform
PLATFORM_WDGL = 11, // WarDrum OpenGL PLATFORM_WDGL = 11, // WarDrum OpenGL
PLATFORM_GL3 = 12, // my GL3 implementation PLATFORM_GL3 = 12, // my GL3 implementation
PLATFORM_GLES1 = 13, PLATFORM_GLES1 = 14,
NUM_PLATFORMS, NUM_PLATFORMS,