Coder Social home page Coder Social logo

aap / librw Goto Github PK

View Code? Open in Web Editor NEW
562.0 25.0 90.0 3.78 MB

A re-implementation of the RenderWare Graphics engine

License: MIT License

Makefile 0.03% C 14.60% C++ 84.02% GLSL 0.15% Lua 0.15% Dockerfile 0.04% Shell 0.01% Batchfile 0.04% HLSL 0.15% CMake 0.68% Python 0.13%
reimplementation reverse-engineering 3d-engine renderware-graphics

librw's People

Contributors

aap avatar agraber avatar ccawley2011 avatar eboutin avatar haydntrigg avatar madebr avatar phire avatar pirulax avatar seoyoungjin avatar sergeanur avatar sk83rjosh avatar sr-tream avatar thirteenag avatar withmorten avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

librw's Issues

Compilation fails in “../src/charset.cpp:35:8”

After type “make all” I get this error:
charset.cpp ../src/charset.cpp:35:8: error: ‘RWDEVICE’ does not name a type 35 | static RWDEVICE::Im2DVertex *vertices; | ^~~~~~~~

If this can help, here is the “log”.

metrics

keep track of number of state, buffer, texture changes, number of uniform uploads and draw calls and stuff like this

add examples

just port over a few RW examples that can be used for testing new platforms.

DMA Extracting?

Granted GTA barely uses Delta morphs, though many other Renderware games do. Is it possible to make it so extracting and editing the facial meshes in the Delta Morph PLG of a model be possible?

reVC doesn't render model textures correctly

Hi,

I've built both re3 and reVC for ARM (32bit) linux.
I'm running Gnome 40 on wayland and I'm using glfw from here: https://github.com/ChrisLane/glfw/tree/wayland

My platform (Odroid XU4) uses the ARM Mali wayland drivers.

Grand Theft Auto 3 from the master branch works and renders perfectly fine.
However Vice City from the miami branch doesn't render the textures on the character models correctly.
Screenshot from 2021-04-19 14-42-39
Screenshot from 2021-04-19 14-43-24

Any ideas how to resolve this?
Perhaps some setting somewhere?
The game works fine otherwise.

Android?

Does it support android? Of course there's original working GTA games but if you'll fix physics in the future... Then 120Hz support will be really great.

rw::Matrix Silently fails if the matrix is not invertible

https://github.com/aap/librw/blob/master/src/rwbase.cpp#L165

Please return a boolean if you cannot invert the matrix. Otherwise we have no idea if it did invert the matrix or not. This is a problem, because we do not want weird graphical glitches or even engine crashes due to plain bugs!

Not to mention that the argument naming is really bad. Please use the "const" qualifier for the input argument, so that the user knows which matrix goes in and which gets written out.

WebAssembly + OpenGL

I've been wondering if there's any attempt in progress to port to WebAssembly, if not, I might take up the task.

Do any of you guys know about the possibility at last?

Cheers

miami game spews out undefined references

Compiling on Raspbian 32-bit, Raspberry Pi 3b

All compiled cool and nice, but the linking process just fails at some point for some reason.

Here's what I got from the process:

Running action 'gmake2'...
Done (20513ms).
==== Building librw (release_linux-arm-librw_gl3_glfw-oal) ====
==== Building reVC (release_linux-arm-librw_gl3_glfw-oal) ====
Running prebuild commands
"./../printHash.sh" "./../src/extras/GitSHA1.cpp"
fatal: not a git repository (or any of the parent directories): .git
GitSHA1.cpp
Linking reVC
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/TexRead.o: in function `CheckVideoCardCaps()':
/home/pi/re3/build/../src/rw/TexRead.cpp:220: undefined reference to `rw::gl3::gl3Caps'
/usr/bin/ld: /home/pi/re3/build/../src/rw/TexRead.cpp:220: undefined reference to `rw::platform'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/TexRead.o: in function `WriteVideoCardCapsFile()':
/home/pi/re3/build/../src/rw/TexRead.cpp:237: undefined reference to `rw::gl3::gl3Caps'
/usr/bin/ld: /home/pi/re3/build/../src/rw/TexRead.cpp:237: undefined reference to `rw::platform'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/TexRead.o: in function `CreateTxdImageForVideoCard()':
/home/pi/re3/build/../src/rw/TxdStore.h:40: undefined reference to `rw::gl3::needToReadBackTextures'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::customFindCB(char const*)':
/home/pi/re3/build/../src/extras/custompipes.cpp:524: undefined reference to `rw::TexDictionary::find(char const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::EnvMapRender()':
/home/pi/re3/build/../src/extras/custompipes.cpp:134: undefined reference to `rw::Frame::transform(rw::Matrix const*, rw::CombineOp)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:141: undefined reference to `rw::Camera::clear(rw::RGBA*, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:148: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:149: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:150: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:151: undefined reference to `rw::SetRenderStatePtr(int, void*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:152: undefined reference to `rw::im2d::RenderIndexedPrimitive(rw::PrimitiveType, void*, int, void*, int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:153: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:154: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::GetGlossTex(rw::Material*)':
/home/pi/re3/build/../src/extras/custompipes.cpp:411: undefined reference to `rw::TexDictionary::find(char const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::AttachRimPipe(rw::Atomic*)':
/home/pi/re3/build/../src/extras/custompipes.cpp:453: undefined reference to `rw::skinGlobals'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::AttachRimPipe(rw::Clump*)':
/home/pi/re3/build/../src/extras/custompipes.cpp:458: undefined reference to `rw::skinGlobals'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeInit()':
/home/pi/re3/build/../src/extras/custompipes.cpp:170: undefined reference to `rw::TexDictionary::find(char const*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:60: undefined reference to `rw::Raster::create(int, int, int, int, int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:62: undefined reference to `rw::Raster::create(int, int, int, int, int)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:64: undefined reference to `rw::Frame::create()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:66: undefined reference to `rw::Camera::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeInit()':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:116: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeInit()':
/home/pi/re3/build/../src/extras/custompipes.cpp:71: undefined reference to `rw::Camera::setNearPlane(float)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:72: undefined reference to `rw::Camera::setFarPlane(float)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:74: undefined reference to `rw::Camera::setViewWindow(rw::V2d const*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:75: undefined reference to `rw::World::addCamera(rw::Camera*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:76: undefined reference to `rw::Texture::create(rw::Raster*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:84: undefined reference to `rw::Frame::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:86: undefined reference to `rw::Raster::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:88: undefined reference to `rw::Raster::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeShutdown()':
/home/pi/re3/build/../src/extras/custompipes.cpp:220: undefined reference to `rw::Texture::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:99: undefined reference to `rw::Raster::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:103: undefined reference to `rw::Raster::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:109: undefined reference to `rw::Frame::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:111: undefined reference to `rw::World::removeCamera(rw::Camera*)'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:112: undefined reference to `rw::Camera::destroy()'
/usr/bin/ld: /home/pi/re3/build/../src/extras/custompipes.cpp:497: undefined reference to `rw::TexDictionary::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeRegister()':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:429: undefined reference to `rw::PluginList::registerPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::CustomPipeRegister()':
/home/pi/re3/build/../src/extras/custompipes.cpp:511: undefined reference to `rw::Material::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/custompipes.o: in function `CustomPipes::SetTxdFindCallback()':
/home/pi/re3/build/../src/extras/custompipes.cpp:535: undefined reference to `rw::Texture::findCB'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMalloc(unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:19: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCalloc(unsigned int, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:25: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFree(void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:26: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwV3dTransformPoints(rw::V3d*, rw::V3d const*, int, rw::Matrix const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:49: undefined reference to `rw::V3d::transformPoints(rw::V3d*, rw::V3d const*, int, rw::Matrix const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixDestroy(rw::Matrix*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:54: undefined reference to `rw::Matrix::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:55: undefined reference to `rw::Matrix::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixSetIdentity(rw::Matrix*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:57: undefined reference to `rw::Matrix::setIdentity()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixTransform(rw::Matrix*, rw::Matrix const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:60: undefined reference to `rw::Matrix::transform(rw::Matrix const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixInvert(rw::Matrix*, rw::Matrix const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:62: undefined reference to `rw::Matrix::invert(rw::Matrix*, rw::Matrix const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixScale(rw::Matrix*, rw::V3d const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:64: undefined reference to `rw::Matrix::scale(rw::V3d const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixTranslate(rw::Matrix*, rw::V3d const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:66: undefined reference to `rw::Matrix::translate(rw::V3d const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwMatrixRotate(rw::Matrix*, rw::V3d const*, float, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:68: undefined reference to `rw::Matrix::rotate(rw::V3d const*, float, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameTranslate(rw::Frame*, rw::V3d const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:87: undefined reference to `rw::Frame::translate(rw::V3d const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRotate(rw::Frame*, rw::V3d const*, float, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:88: undefined reference to `rw::Frame::rotate(rw::V3d const*, float, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameScale(rw::Frame*, rw::V3d const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:89: undefined reference to `rw::Frame::scale(rw::V3d const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameTransform(rw::Frame*, rw::Matrix const*, RwOpCombineType)':
/home/pi/re3/build/../src/fakerw/fake.cpp:90: undefined reference to `rw::Frame::transform(rw::Matrix const*, rw::CombineOp)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameSetIdentity(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:93: undefined reference to `rw::Matrix::setIdentity()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:93: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameForAllChildren(rw::Frame*, rw::Frame* (*)(rw::Frame*, void*), void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:97: undefined reference to `rw::Frame::forAllChildren(rw::Frame* (*)(rw::Frame*, void*), void*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRemoveChild(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:98: undefined reference to `rw::Frame::removeChild()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameAddChild(rw::Frame*, rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:99: undefined reference to `rw::Frame::addChild(rw::Frame*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameGetLTM(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:102: undefined reference to `rw::Frame::getLTM()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameUpdateObjects(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:104: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:105: undefined reference to `rw::Frame::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameDestroy(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:108: undefined reference to `rw::Frame::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:31: undefined reference to `rw::PluginList::registerPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/fake.cpp:115: undefined reference to `rw::Frame::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRegisterPluginStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void const*, int, int), int (*)(void const*, int, int))':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:31: undefined reference to `rw::PluginList::registerStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void*, int, int), int (*)(void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwFrameRegisterPluginStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void const*, int, int), int (*)(void const*, int, int))':
/home/pi/re3/build/../src/fakerw/fake.cpp:122: undefined reference to `rw::Frame::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `rwFrameListDeinitialize(rw::FrameList_*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:129: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `rwFrameListStreamRead(rw::Stream*, rw::FrameList_*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:130: undefined reference to `rw::FrameList_::streamRead(rw::Stream*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraClear(rw::Camera*, rw::RGBA*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:137: undefined reference to `rw::Camera::clear(rw::RGBA*, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraShowRaster(rw::Camera*, void*, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:139: undefined reference to `rw::Camera::showRaster(unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraDestroy(rw::Camera*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:140: undefined reference to `rw::Camera::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:141: undefined reference to `rw::Camera::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraClone(rw::Camera*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:142: undefined reference to `rw::Camera::clone()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraSetViewOffset(rw::Camera*, rw::V2d const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:143: undefined reference to `rw::Camera::setViewOffset(rw::V2d const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraSetViewWindow(rw::Camera*, rw::V2d const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:144: undefined reference to `rw::Camera::setViewWindow(rw::V2d const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraSetNearClipPlane(rw::Camera*, float)':
/home/pi/re3/build/../src/fakerw/fake.cpp:146: undefined reference to `rw::Camera::setNearPlane(float)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraSetFarClipPlane(rw::Camera*, float)':
/home/pi/re3/build/../src/fakerw/fake.cpp:147: undefined reference to `rw::Camera::setFarPlane(float)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraFrustumTestSphere(rw::Camera const*, rw::Sphere const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:151: undefined reference to `rw::Camera::frustumTestSphere(rw::Sphere const*) const'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraGetCurrentCamera()':
/home/pi/re3/build/../src/fakerw/fake.cpp:161: undefined reference to `rw::engine'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwCameraSetFrame(rw::Camera*, rw::Frame*)':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:116: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageCreate(int, int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:172: undefined reference to `rw::Image::create(int, int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageDestroy(rw::Image*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:173: undefined reference to `rw::Image::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageAllocatePixels(rw::Image*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:174: undefined reference to `rw::Image::allocate()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageFreePixels(rw::Image*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:175: undefined reference to `rw::Image::free()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageSetPath(char const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:184: undefined reference to `rw::Image::setSearchPath(char const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwImageFindRasterFormat(rw::Image*, int, int*, int*, int*, int*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:211: undefined reference to `rw::Raster::imageFindRasterFormat(rw::Image*, int, int*, int*, int*, int*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterCreate(int, int, int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:217: undefined reference to `rw::Raster::create(int, int, int, int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterDestroy(rw::Raster*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:218: undefined reference to `rw::Raster::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterRenderFast(rw::Raster*, int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:229: undefined reference to `rw::Raster::renderFast(int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterPushContext(rw::Raster*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:232: undefined reference to `rw::Raster::pushContext(rw::Raster*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterPopContext()':
/home/pi/re3/build/../src/fakerw/fake.cpp:233: undefined reference to `rw::Raster::popContext()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterGetCurrentContext()':
/home/pi/re3/build/../src/fakerw/fake.cpp:234: undefined reference to `rw::Raster::getCurrentContext()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterLock(rw::Raster*, unsigned char, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:238: undefined reference to `rw::Raster::lock(int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterUnlock(rw::Raster*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:239: undefined reference to `rw::Raster::unlock(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRasterSetFromImage(rw::Raster*, rw::Image*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:246: undefined reference to `rw::Raster::setFromImage(rw::Image*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTextureCreate(rw::Raster*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:251: undefined reference to `rw::Texture::create(rw::Raster*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTextureDestroy(rw::Texture*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:252: undefined reference to `rw::Texture::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTextureRead(char const*, char const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:273: undefined reference to `rw::Texture::read(char const*, char const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `rwNativeTextureHackRead(rw::Stream*, rw::Texture**, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:306: undefined reference to `rw::Texture::streamReadNative(rw::Stream*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:308: undefined reference to `rw::Raster::convertTexToCurrentPlatform(rw::Raster*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:317: undefined reference to `rw::TexDictionary::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryDestroy(rw::TexDictionary*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:318: undefined reference to `rw::TexDictionary::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryAddTexture(rw::TexDictionary*, rw::Texture*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:319: undefined reference to `rw::TexDictionary::addFront(rw::Texture*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryFindNamedTexture(rw::TexDictionary*, char const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:321: undefined reference to `rw::TexDictionary::find(char const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryGetCurrent()':
/home/pi/re3/build/../src/fakerw/fake.cpp:322: undefined reference to `rw::TexDictionary::getCurrent()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionarySetCurrent(rw::TexDictionary*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:323: undefined reference to `rw::TexDictionary::setCurrent(rw::TexDictionary*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwTexDictionaryStreamWrite(rw::TexDictionary const*, rw::Stream*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:337: undefined reference to `rw::TexDictionary::streamWrite(rw::Stream*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwStreamOpen(RwStreamType, RwStreamAccessType, void const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:386: undefined reference to `rw::StreamMemory::open(unsigned char*, unsigned int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:367: undefined reference to `rw::StreamFile::open(char const*, char const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:375: undefined reference to `rw::StreamFile::open(char const*, char const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:371: undefined reference to `rw::allocLocation'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:371: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:371: undefined reference to `vtable for rw::StreamMemory'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:371: undefined reference to `vtable for rw::StreamFile'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwStreamClose(rw::Stream*, void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:396: undefined reference to `rw::Engine::memfuncs'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwStreamFindChunk(rw::Stream*, unsigned int, unsigned int*, unsigned int*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:402: undefined reference to `rw::findChunk(rw::Stream*, unsigned int, unsigned int*, unsigned int*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DGetNearScreenZ()':
/home/pi/re3/build/../src/fakerw/fake.cpp:417: undefined reference to `rw::im2d::GetNearZ()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DGetFarScreenZ()':
/home/pi/re3/build/../src/fakerw/fake.cpp:418: undefined reference to `rw::im2d::GetFarZ()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DRenderLine(rw::gl3::Im2DVertex*, int, int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:420: undefined reference to `rw::im2d::RenderLine(void*, int, int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DRenderTriangle(rw::gl3::Im2DVertex*, int, int, int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:422: undefined reference to `rw::im2d::RenderTriangle(void*, int, int, int, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DRenderPrimitive(RwPrimitiveType, rw::gl3::Im2DVertex*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:424: undefined reference to `rw::im2d::RenderPrimitive(rw::PrimitiveType, void*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm2DRenderIndexedPrimitive(RwPrimitiveType, rw::gl3::Im2DVertex*, int, unsigned short*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:426: undefined reference to `rw::im2d::RenderIndexedPrimitive(rw::PrimitiveType, void*, int, void*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm3DTransform(rw::gl3::Im3DVertex*, unsigned int, rw::Matrix*, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:434: undefined reference to `rw::im3d::Transform(void*, int, rw::Matrix*, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm3DEnd()':
/home/pi/re3/build/../src/fakerw/fake.cpp:435: undefined reference to `rw::im3d::End()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm3DRenderLine(int, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:440: undefined reference to `rw::im3d::RenderIndexedPrimitive(rw::PrimitiveType, void*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwIm3DRenderIndexedPrimitive(RwPrimitiveType, unsigned short*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:444: undefined reference to `rw::im3d::RenderIndexedPrimitive(rw::PrimitiveType, void*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRenderStateGet(RwRenderState, void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:461: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:463: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:464: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:465: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:466: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o:/home/pi/re3/build/../src/fakerw/fake.cpp:467: more undefined references to `rw::GetRenderState(int)' follow
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRenderStateGet(RwRenderState, void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:456: undefined reference to `rw::GetRenderStatePtr(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:457: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:458: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:459: undefined reference to `rw::GetRenderState(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwRenderStateSet(RwRenderState, void*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:503: undefined reference to `rw::SetRenderStatePtr(int, void*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:523: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:516: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:504: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:505: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:506: undefined reference to `rw::SetRenderState(int, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o:/home/pi/re3/build/../src/fakerw/fake.cpp:508: more undefined references to `rw::SetRenderState(int, unsigned int)' follow
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineInit(RwMemoryFunctions*, unsigned int, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:562: undefined reference to `rw::Engine::init(rw::MemoryFunctions*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineOpen(RwEngineOpenParams*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:574: undefined reference to `rw::Engine::open(rw::EngineOpenParams*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineStart()':
/home/pi/re3/build/../src/fakerw/fake.cpp:578: undefined reference to `rw::Engine::start()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:578: undefined reference to `rw::d3d::isP8supported'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineStop()':
/home/pi/re3/build/../src/fakerw/fake.cpp:580: undefined reference to `rw::Engine::stop()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineClose()':
/home/pi/re3/build/../src/fakerw/fake.cpp:581: undefined reference to `rw::Engine::close()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineTerm()':
/home/pi/re3/build/../src/fakerw/fake.cpp:582: undefined reference to `rw::Engine::term()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetNumSubSystems()':
/home/pi/re3/build/../src/fakerw/fake.cpp:585: undefined reference to `rw::Engine::getNumSubSystems()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetSubSystemInfo(rw::SubSystemInfo*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:587: undefined reference to `rw::Engine::getSubSystemInfo(rw::SubSystemInfo*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetCurrentSubSystem()':
/home/pi/re3/build/../src/fakerw/fake.cpp:588: undefined reference to `rw::Engine::getCurrentSubSystem()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineSetSubSystem(int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:589: undefined reference to `rw::Engine::setSubSystem(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetNumVideoModes()':
/home/pi/re3/build/../src/fakerw/fake.cpp:590: undefined reference to `rw::Engine::getNumVideoModes()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetVideoModeInfo(rw::VideoMode*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:592: undefined reference to `rw::Engine::getVideoModeInfo(rw::VideoMode*, int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineGetCurrentVideoMode()':
/home/pi/re3/build/../src/fakerw/fake.cpp:593: undefined reference to `rw::Engine::getCurrentVideoMode()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwEngineSetVideoMode(int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:594: undefined reference to `rw::Engine::setVideoMode(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwD3D8EngineSetMultiSamplingLevels(unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:605: undefined reference to `rw::Engine::setMultiSamplingLevels(unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RwD3D8EngineGetMaxMultiSamplingLevels()':
/home/pi/re3/build/../src/fakerw/fake.cpp:606: undefined reference to `rw::Engine::getMaxMultiSamplingLevels()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMaterialCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:609: undefined reference to `rw::Material::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMaterialDestroy(rw::Material*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:610: undefined reference to `rw::Material::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMaterialSetTexture(rw::Material*, rw::Texture*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:612: undefined reference to `rw::Material::setTexture(rw::Texture*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpLightSetFrame(rw::Light*, rw::Frame*)':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:116: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpLightCreate(int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:640: undefined reference to `rw::Light::create(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpLightDestroy(rw::Light*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:641: undefined reference to `rw::Light::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpLightSetColor(rw::Light*, rw::RGBAf const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:643: undefined reference to `rw::Light::setColor(float, float, float)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryCreate(int, int, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:660: undefined reference to `rw::Geometry::create(int, int, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryDestroy(rw::Geometry*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:661: undefined reference to `rw::Geometry::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryLock(rw::Geometry*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:663: undefined reference to `rw::Geometry::lock(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryUnlock(rw::Geometry*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:664: undefined reference to `rw::Geometry::unlock()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMorphTargetCalcBoundingSphere(rw::MorphTarget const*, rw::Sphere*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:669: undefined reference to `rw::MorphTarget::calculateBoundingSphere() const'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryAddMorphTargets(rw::Geometry*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:670: undefined reference to `rw::Geometry::addMorphTargets(int)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:670: undefined reference to `rw::Geometry::addMorphTargets(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryTriangleSetMaterial(rw::Geometry*, rw::Triangle*, rw::Material*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:691: undefined reference to `rw::MaterialList::findIndex(rw::Material*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:693: undefined reference to `rw::MaterialList::appendMaterial(rw::Material*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpGeometryStreamRead(rw::Stream*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:717: undefined reference to `rw::Geometry::streamRead(rw::Stream*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRender(rw::Clump*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:739: undefined reference to `rw::Clump::render()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRemoveAtomic(rw::Clump*, rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:740: undefined reference to `rw::Clump::removeAtomic(rw::Atomic*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpAddAtomic(rw::Clump*, rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:741: undefined reference to `rw::Clump::addAtomic(rw::Atomic*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpDestroy(rw::Clump*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:746: undefined reference to `rw::Clump::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:747: undefined reference to `rw::Clump::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpClone(rw::Clump*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:748: undefined reference to `rw::Clump::clone()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpStreamRead(rw::Stream*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:754: undefined reference to `rw::Clump::streamRead(rw::Stream*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:804: undefined reference to `rw::PluginList::registerPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/fake.cpp:757: undefined reference to `rw::Clump::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRegisterPluginStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void const*, int, int), int (*)(void const*, int, int))':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:804: undefined reference to `rw::PluginList::registerStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void*, int, int), int (*)(void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpClumpRegisterPluginStream(unsigned int, rw::Stream* (*)(rw::Stream*, int, void*, int, int), rw::Stream* (*)(rw::Stream*, int, void const*, int, int), int (*)(void const*, int, int))':
/home/pi/re3/build/../src/fakerw/fake.cpp:759: undefined reference to `rw::Clump::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicCreate()':
/home/pi/re3/build/../src/fakerw/fake.cpp:766: undefined reference to `rw::Atomic::create()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicDestroy(rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:767: undefined reference to `rw::Atomic::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicClone(rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:768: undefined reference to `rw::Atomic::clone()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicSetFrame(rw::Atomic*, rw::Frame*)':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:116: undefined reference to `rw::Frame::updateObjects()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicSetGeometry(rw::Atomic*, rw::Geometry*, unsigned int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:770: undefined reference to `rw::Atomic::setGeometry(rw::Geometry*, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicSetRenderCallBack(rw::Atomic*, rw::Atomic* (*)(rw::Atomic*))':
/home/pi/re3/build/../src/fakerw/fake.cpp:781: undefined reference to `rw::Atomic::defaultRenderCB(rw::Atomic*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/src/rwobjects.h:609: undefined reference to `rw::PluginList::registerPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void*, int, int))'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpAtomicRegisterPlugin(int, unsigned int, void* (*)(void*, int, int), void* (*)(void*, int, int), void* (*)(void*, void const*, int, int))':
/home/pi/re3/build/../src/fakerw/fake.cpp:788: undefined reference to `rw::Atomic::s_plglist'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `AtomicDefaultRenderCallBack(rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:795: undefined reference to `rw::Atomic::defaultRenderCB(rw::Atomic*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldCreate(rw::BBox*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:799: undefined reference to `rw::World::create(rw::BBox*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldDestroy(rw::World*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:800: undefined reference to `rw::World::destroy()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldPluginAttach()':
/home/pi/re3/build/../src/fakerw/fake.cpp:803: undefined reference to `rw::registerMeshPlugin()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:804: undefined reference to `rw::registerNativeDataPlugin()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:805: undefined reference to `rw::registerAtomicRightsPlugin()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:806: undefined reference to `rw::registerMaterialRightsPlugin()'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:809: undefined reference to `rw::xbox::registerVertexFormatPlugin()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldRemoveCamera(rw::World*, rw::Camera*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:813: undefined reference to `rw::World::removeCamera(rw::Camera*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldAddCamera(rw::World*, rw::Camera*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:814: undefined reference to `rw::World::addCamera(rw::Camera*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldAddLight(rw::World*, rw::Light*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:822: undefined reference to `rw::World::addLight(rw::Light*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpWorldRemoveLight(rw::World*, rw::Light*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:823: undefined reference to `rw::World::removeLight(rw::Light*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXPluginAttach()':
/home/pi/re3/build/../src/fakerw/fake.cpp:831: undefined reference to `rw::registerMatFXPlugin()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXAtomicEnableEffects(rw::Atomic*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:832: undefined reference to `rw::MatFX::enableEffects(rw::Atomic*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialGetEffects(rw::Material const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:833: undefined reference to `rw::MatFX::getEffects(rw::Material const*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialSetEffects(rw::Material*, RpMatFXMaterialFlags)':
/home/pi/re3/build/../src/fakerw/fake.cpp:834: undefined reference to `rw::MatFX::setEffects(rw::Material*, unsigned int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialSetupEnvMap(rw::Material*, rw::Texture*, rw::Frame*, int, float)':
/home/pi/re3/build/../src/fakerw/fake.cpp:836: undefined reference to `rw::MatFX::get(rw::Material const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:837: undefined reference to `rw::MatFX::setEnvTexture(rw::Texture*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:838: undefined reference to `rw::MatFX::setEnvFrame(rw::Frame*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:839: undefined reference to `rw::MatFX::setEnvCoefficient(float)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialSetEnvMapFrame(rw::Material*, rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:844: undefined reference to `rw::MatFX::get(rw::Material const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:845: undefined reference to `rw::MatFX::setEnvFrame(rw::Frame*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialSetEnvMapFrameBufferAlpha(rw::Material*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:850: undefined reference to `rw::MatFX::get(rw::Material const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:851: undefined reference to `rw::MatFX::setEnvFBAlpha(int)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialSetEnvMapCoefficient(rw::Material*, float)':
/home/pi/re3/build/../src/fakerw/fake.cpp:856: undefined reference to `rw::MatFX::get(rw::Material const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:857: undefined reference to `rw::MatFX::setEnvCoefficient(float)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpMatFXMaterialGetEnvMapCoefficient(rw::Material const*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:862: undefined reference to `rw::MatFX::get(rw::Material const*)'
/usr/bin/ld: /home/pi/re3/build/../src/fakerw/fake.cpp:863: undefined reference to `rw::MatFX::getEnvCoefficient()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpHAnimPluginAttach()':
/home/pi/re3/build/../src/fakerw/fake.cpp:869: undefined reference to `rw::registerHAnimPlugin()'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpHAnimFrameGetID(rw::Frame*)':
/home/pi/re3/build/../src/fakerw/fake.cpp:873: undefined reference to `rw::HAnimData::get(rw::Frame*)'
/usr/bin/ld: obj/linux-arm-librw_gl3_glfw-oal/Release/reVC/fake.o: in function `RpHAnimIDGetIndex(rw::HAnimHierarchy*, int)':
/home/pi/re3/build/../src/fakerw/fake.cpp:875: undefined reference to `rw::HAnimHierarchy::getIndex(int)'
/usr^Cmake[1]: *** [reVC.make:629: ../bin/linux-arm-librw_gl3_glfw-oal/Release/reVC] Interrupt
make: *** [Makefile:62: reVC] Interrupt

I decided to interrupt it, cause the initial output was way longer. Any ideas?

Splitting files into src and include folders

How about putting all header files into a distinguished /include/librw/ folder so that you can put
#include <librw/collision.h>
into the source code? I think I have seen this directory pattern at other professional projects before. :)

generic way to access the atomic bounding sphere

In Criterion RW there is the function "RpAtomicGetWorldBoundingSphere". It calculates the bounding sphere of the atomic and correctly places it in world space. This is required for frustum checking of models. Since we are doing a game engine we really need access to the bounding sphere.

I am aware that there is a bounding sphere attached to geometry data. Can you please add an easy way to access a correctly aligned bounding sphere?

join and help the project

Hello.

I was trying to run the REAL RenderWare in a Virtual Box machine, in a Windows XP. I done a lot, installed a lot of things (office 2002, visual studio 2002 xp, active x controls etc to have all DLL's and stuffs like that), still bugged to get the license because some bug in date license. So, I gave up trying for a lot of hours.

I sent an email to CriterionGames asked them to open source RenderWare a few days ago. They did no answer me.

After some searchs on google, I saw this project, and made me very happy some people are creating an Open Source version of RW.

Said all that, I would like to join and help the project. How can I (and other interested people) contribute?
(I particulary never used RW)

Recap: a lot of code is dead in assert() statements

Examples:
https://github.com/aap/librw/blob/master/src/image.cpp#L65
https://github.com/aap/librw/blob/master/src/image.cpp#L179
https://github.com/aap/librw/blob/master/src/image.cpp#L241
https://github.com/aap/librw/blob/master/src/geometry.cpp#L106

  • it never finds the chunk if asserts are disabled

https://github.com/aap/librw/blob/master/src/image.cpp#L528

  • it never opens the file for writing TGA if asserts are disabled

In Release mode, some compilers like to put the preprocessor definition "NDEBUG" to disable things like the "assert" macro to speed up code. In return, your code breaks because assert statements do not execute in Release mode anymore. Please take a look at this issue. :)

Could you give a release?

I do not know how to compile them and get .exe file. All I want is to open some .dff files written by renderware and convert them into 3ds max finally. So could you help me to do this? The game is not GTA but others.

Engine leaks at initialization

#include <rw.h>
int main() {
    rw::Engine::init();
    rw::Engine::open();
    rw::Engine::start(nullptr);
    rw::Engine::stop();
    rw::Engine::close();
    return 0;
}
==11896==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7fec06b88870 in operator new(unsigned long) (/lib64/libasan.so.5+0xf0870)
    #1 0x41984a in rw::wdgl::makeDefaultPipeline() /home/maarten/programming/openrw/cmake/external/librw/src/gl/wdgl.cpp:533
    #2 0x4183f2 in driverOpen /home/maarten/programming/openrw/cmake/external/librw/src/gl/wdgl.cpp:28
    #3 0x40b4bc in rw::PluginList::construct(void*) /home/maarten/programming/openrw/cmake/external/librw/src/plg.cpp:25
    #4 0x4075c7 in rw::Engine::start(rw::EngineStartParams*) /home/maarten/programming/openrw/cmake/external/librw/src/engine.cpp:166
    #5 0x401a8c in main /home/maarten/programming/openrw/tools/librw_tests.cpp:10
    #6 0x7fec05dbe18a in __libc_start_main (/lib64/libc.so.6+0x2318a)

Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7fec06b88870 in operator new(unsigned long) (/lib64/libasan.so.5+0xf0870)
    #1 0x41b765 in rw::d3d8::makeDefaultPipeline() /home/maarten/programming/openrw/cmake/external/librw/src/d3d/d3d8.cpp:424
    #2 0x41a21c in driverOpen /home/maarten/programming/openrw/cmake/external/librw/src/d3d/d3d8.cpp:26
    #3 0x40b4bc in rw::PluginList::construct(void*) /home/maarten/programming/openrw/cmake/external/librw/src/plg.cpp:25
    #4 0x4075c7 in rw::Engine::start(rw::EngineStartParams*) /home/maarten/programming/openrw/cmake/external/librw/src/engine.cpp:166
    #5 0x401a8c in main /home/maarten/programming/openrw/tools/librw_tests.cpp:10
    #6 0x7fec05dbe18a in __libc_start_main (/lib64/libc.so.6+0x2318a)

Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7fec06b88870 in operator new(unsigned long) (/lib64/libasan.so.5+0xf0870)
    #1 0x41e30b in rw::d3d9::makeDefaultPipeline() /home/maarten/programming/openrw/cmake/external/librw/src/d3d/d3d9.cpp:590
    #2 0x41c2d8 in driverOpen /home/maarten/programming/openrw/cmake/external/librw/src/d3d/d3d9.cpp:34
    #3 0x40b4bc in rw::PluginList::construct(void*) /home/maarten/programming/openrw/cmake/external/librw/src/plg.cpp:25
    #4 0x4075c7 in rw::Engine::start(rw::EngineStartParams*) /home/maarten/programming/openrw/cmake/external/librw/src/engine.cpp:166
    #5 0x401a8c in main /home/maarten/programming/openrw/tools/librw_tests.cpp:10
    #6 0x7fec05dbe18a in __libc_start_main (/lib64/libc.so.6+0x2318a)

Direct leak of 56 byte(s) in 1 object(s) allocated from:
    #0 0x7fec06b88870 in operator new(unsigned long) (/lib64/libasan.so.5+0xf0870)
    #1 0x42123f in rw::xbox::makeDefaultPipeline() /home/maarten/programming/openrw/cmake/external/librw/src/d3d/xbox.cpp:386
    #2 0x41ff60 in driverOpen /home/maarten/programming/openrw/cmake/external/librw/src/d3d/xbox.cpp:24
    #3 0x40b4bc in rw::PluginList::construct(void*) /home/maarten/programming/openrw/cmake/external/librw/src/plg.cpp:25
    #4 0x4075c7 in rw::Engine::start(rw::EngineStartParams*) /home/maarten/programming/openrw/cmake/external/librw/src/engine.cpp:166
    #5 0x401a8c in main /home/maarten/programming/openrw/tools/librw_tests.cpp:10
    #6 0x7fec05dbe18a in __libc_start_main (/lib64/libc.so.6+0x2318a)

Direct leak of 40 byte(s) in 1 object(s) allocated from:
    #0 0x7fec06b88870 in operator new(unsigned long) (/lib64/libasan.so.5+0xf0870)
    #1 0x40734e in rw::Engine::open() /home/maarten/programming/openrw/cmake/external/librw/src/engine.cpp:131
    #2 0x401a82 in main /home/maarten/programming/openrw/tools/librw_tests.cpp:9
    #3 0x7fec05dbe18a in __libc_start_main (/lib64/libc.so.6+0x2318a)

SUMMARY: AddressSanitizer: 288 byte(s) leaked in 5 allocation(s).

wont build on mac os with M1 processor

steps:

./premake5 gmake  //or gmake2

cd build

make config=release

../src/charset.cpp:35:8: error: use of undeclared identifier 'RWDEVICE' static RWDEVICE::Im2DVertex *vertices; ^ ../src/charset.cpp:47:20: error: use of undeclared identifier 'RWDEVICE' vertices = rwNewT(RWDEVICE::Im2DVertex, NUMCHARS*4, MEMDUR_EVENT); ^ ../src/charset.cpp:47:13: error: expected expression vertices = rwNewT(RWDEVICE::Im2DVertex, NUMCHARS*4, MEMDUR_EVENT); ^ ../src/rwengine.h:217:28: note: expanded from macro 'rwNewT' #define rwNewT(t, s, h) (t*)rw::mustmalloc_LOC((s)*sizeof(t),h,RWHERE) ^ ../src/charset.cpp:145:2: error: use of undeclared identifier 'RWDEVICE' RWDEVICE::Im2DVertex *vert; ^

Recap: interrupting the program on error is inacceptable for networked games

In your library you like to use the assert statement to halt program execution if an error occurred. We are currently programming a game engine that uses your library and are worried about that. What if we allow loading of resources into our engine that are not verified by us? The game engine will crash and our users are gonna be very upset.

Please consider creating an error handling system for your library :)
One of the many options are C++ exceptions. They work really great and - if you use exception handlers - clean up after themselves. You could also cook up something unique. Just please do not make the game engine crash if there is an error in assets!

Thanks.

Can't use makefiles

When I compiled the application, I opened the Developer Command Prompt for VS2015 and changed directories to the build folder. From there, I entered the command "nmake -f Makefile" only to get an error.
Makefile(4) : fatal error U1034: syntax error : separator missing Stop.

Am I doing something wrong?

This repository does not have a code of conduct

Hi,

I just noticed your repository does not have a Code of Conduct applied to it. May I suggest you add one? I want to feel good about using this project, and have it be a safe space for many kittens.

Here's a good suggestion:

[link here]

Meow!

shared buffers

don't allocate new buffers for everyone but do it in one big chunk and allocate from there.

ska2anm does not work when building librw with gl3 backend

Error is:

Program received signal SIGSEGV, Segmentation fault.
0x000000000042c83d in rw::gl3::openGLFW (openparams=0x0) at /home/maarten/programming/librw/src/gl/gl3device.cpp:1645
1645		glGlobals.winWidth = openparams->width;

Backtrace of running ska2anm without arguments is:

#0  0x000000000042c83d in rw::gl3::openGLFW (openparams=0x0)
    at /home/maarten/programming/librw/src/gl/gl3device.cpp:1645
#1  0x000000000042d3d7 in rw::gl3::deviceSystemGLFW (req=rw::DEVICEOPEN, arg=0x0, n=0)
    at /home/maarten/programming/librw/src/gl/gl3device.cpp:1984
#2  0x000000000040b68c in rw::Engine::open (p=0x0) at /home/maarten/programming/librw/src/engine.cpp:270
#3  0x0000000000404d4d in main (argc=1, argv=0x7fffffffdd98)
    at /home/maarten/programming/librw/tools/ska2anm/ska2anm.cpp:26

please add a texture scan lookup callback

In original Criterion RW, there is a function to set the current global texture lookup callback. If you set this callback then everytime rw::Texture::read is called your callback is called instead. This is really handy because you could do a lot more than just get the textures from the current TXD... you could even link look inside more TXDs than just the current TXD!

Please add such a functionality. It has been added since RW 3.5.

Calculate the determinant of a Matrix

Sometimes I just want to know if a Matrix is invertible. For that I have to verify if the determinant of the matrix is 0. There currently is no way to calculate the determinant of a Matrix in your library without it being part of the Matrix inversion code. Can you please add it to your math library?

Incorrect Render Size on Macbook Pro M1

When building another project of yours that uses librw on the Macbook Pro M1, the in-game rendered world is incorrectly sized. It is roughly twice the width and height vs the actual framebuffer. This is probably due to Retina.

I was able to fix it by changing the following

librw/src/gl/gl3device.cpp

Lines 1256 to 1257 in 373f839

float32 invwx = 1.0f/cam->viewWindow.x;
float32 invwy = 1.0f/cam->viewWindow.y;

to

	float32 invwx = 1.0f/cam->viewWindow.x/2;
	float32 invwy = 1.0f/cam->viewWindow.y/2;

and by changing

librw/src/gl/gl3device.cpp

Lines 1400 to 1401 in 373f839

glCopyTexSubImage2D(GL_TEXTURE_2D, 0, x, (dst->height-src->height)-y,
0, 0, src->width, src->height);

to

			glCopyTexSubImage2D(GL_TEXTURE_2D, 0, x, (dst->height-src->height)-y,
				src->width/2, src->height/2, src->width, src->height);

I'm not knowledable enough in your engine or OpenGL to see why this happens, but if you are unable, or unwilling, I can try to investigate the root cause, if there is one.

Atomic::getWorldBoundingSphere does not set sphere center

https://github.com/aap/librw/blob/master/src/clump.cpp#L618

The function rw::Atomic::getWorldBoundingSphere is misbehaving. If I call this function multiple times while the LTM of the atomic parent frame is not the identity matrix, then the sphere center moves into space! I think this can be fixed by also writing the sphere center of the morph target into s->center. I wonder why you have not written the center into the sphere in the first place.

Please review this problem. :-)

RwRasterRenderFast: Expand supported types

Found this while working with render targets (rwRASTERTYPECAMERATEXTURE); it currently only supports copying from rwRASTERTYPECAMERA.

It appears that it should support all available raster types based on:
https://github.com/GTAmodding/rw37/blob/master/src/driver/d3d8/d3d8raster.c#L1469
https://github.com/GTAmodding/rw37/blob/master/src/driver/d3d9/d3d9raster.c#L1591

The only problem I see with this, is that we'll have to use the slower glCopyImageSubData instead of glCopyTexSubImage2D. Though we can probably limit that just to the types that require it, and avoid any functional changes.

For reference:

rasterRenderFast(Raster *raster, int32 x, int32 y)

rw::Atomic lacks render()

In Criterion RW Atomics are render configurations that are linked to a Geometry. They render based on a parent object, a frame. There is no such method in librw, making rendering not possible.

Rendering is achieved by drawing the geometry onto the current camera color surface. Depth information can be stored in an optional camera depth surface, too.

Please add such a system.

https://github.com/aap/librw/blob/master/src/rwobjects.h#L579

`modulateEnvMap` doesn't exist

When attempting to build reVC, I get an error telling me modulateEnvMap doesn't exist.
When I implemented it into librw's source, it compiled fine.

Please add a 3x3 Matrix

A 4x4 Matrix is a very heavy mathematical object in comparison to a 3x3 Matrix. I would really appreciate it if you also include a 3x3 Matrix because it is often needed to determine the dimensions of 3 dimensional point configurations. Doing things with 3x3 Matrices is just much faster.

GLAD support

Support GLAD as an alternative OpenGL loader to use for platforms where GLEW isn't available (eg. Switch).

Let the system provide its own glad path as well for platform specific stuff when building

imgui does not accept io.DeltaTime=0

After bumping to imgui 1.83.0, imguitest occasionally crashes with an assertion error:

imguitest: /home/maarten/programming/librw/skeleton/imgui/imgui.cpp:7147: void ImGui::ErrorCheckNewFrameSanityChecks(): Assertion `(g.IO.DeltaTime > 0.0f || g.FrameCount == 0) && "Need a positive DeltaTime!"' failed.

https://github.com/ocornut/imgui/blob/cc40ae2101acd1fb4e0585a46198e6fd12960617/imgui.cpp#L7195

I traced it back to io.DeltaTime being zero.

When using linux+gl3+sdl2, this value is derived from SDL_GetTicks:

librw/skeleton/sdl2.cpp

Lines 300 to 303 in b164e49

float currTime = SDL_GetTicks();
float timeDelta = (currTime - lastTime) * 0.001f;
EventHandler(IDLE, &timeDelta);

io.DeltaTime is set here:

io.DeltaTime = timeDelta;

My old machine is too fast 😄

Compilation fails

Downloaded the master branch on 09.July.2017. Using Visual Studio 2015. When building the librw project I get the following compiler errors:

error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax librw 2017_06_librw-master\src\geometry.cpp Line 157

The problematic line is this:
defaultSurfaceProps = (SurfaceProperties){ 1.0f, 1.0f, 1.0f };

Error C2065 "M_PI": Undeclared identifier
librw 2017_06_librw-master\src\base.cpp Line 259

The line is : angle = angle*M_PI/180.0f;

BTW. Are the links up-to-date?
http://gtaforums.com/topic/752450-rel-renderware-file-converter/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.