summaryrefslogtreecommitdiff
path: root/tools/im2d/im2d.cpp
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
committerclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
commit847962910f0bff071f3bf07c9abb87764fb6cac3 (patch)
treeddcd429e134c7fd5f72ddc97ced175de8d66fcd0 /tools/im2d/im2d.cpp
downloadlibrw-master.tar.gz
librw-master.zip
Import aap/librw @ masterHEADmaster
Snapshot for re3/reVC vendoring, per @lzcnt. Source: https://github.com/aap/librw (master).
Diffstat (limited to 'tools/im2d/im2d.cpp')
-rw-r--r--tools/im2d/im2d.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/tools/im2d/im2d.cpp b/tools/im2d/im2d.cpp
new file mode 100644
index 0000000..da4c084
--- /dev/null
+++ b/tools/im2d/im2d.cpp
@@ -0,0 +1,134 @@
+#include <rw.h>
+#include <skeleton.h>
+
+#include "im2d.h"
+
+bool Im2DColored = true;
+bool Im2DTextured;
+
+rw::int32 Im2DPrimType;
+
+rw::V2d ScreenSize;
+float Scale;
+
+rw::RGBA SolidWhite = {255, 255, 255, 255};
+rw::RGBA SolidBlack = {0, 0, 0, 255};
+rw::RGBA SolidRed = {200, 64, 64, 255};
+rw::RGBA SolidGreen = {64, 200, 64, 255};
+rw::RGBA SolidBlue = {64, 64, 200, 255};
+rw::RGBA SolidYellow = {200, 200, 64, 255};
+rw::RGBA SolidPurple = {200, 64, 200, 255};
+rw::RGBA SolidCyan = {64, 200, 200, 255};
+
+rw::Texture *Im2DTexture;
+
+void
+Im2DInitialize(rw::Camera *camera)
+{
+ ScreenSize.x = camera->frameBuffer->width;
+ ScreenSize.y = camera->frameBuffer->height;
+
+ Scale = ScreenSize.y / 3.0f;
+
+ rw::Image::setSearchPath("files/");
+ Im2DTexture = rw::Texture::read("whiteash", nil);
+
+ LineListCreate(camera);
+ LineListSetColor(!Im2DColored);
+
+ IndexedLineListCreate(camera);
+ IndexedLineListSetColor(!Im2DColored);
+
+ PolyLineCreate(camera);
+ PolyLineSetColor(!Im2DColored);
+
+ IndexedPolyLineCreate(camera);
+ IndexedPolyLineSetColor(!Im2DColored);
+
+ TriListCreate(camera);
+ TriListSetColor(!Im2DColored);
+
+ IndexedTriListCreate(camera);
+ IndexedTriListSetColor(!Im2DColored);
+
+ TriStripCreate(camera);
+ TriStripSetColor(!Im2DColored);
+
+ IndexedTriStripCreate(camera);
+ IndexedTriStripSetColor(!Im2DColored);
+
+ TriFanCreate(camera);
+ TriFanSetColor(!Im2DColored);
+
+ IndexedTriFanCreate(camera);
+ IndexedTriFanSetColor(!Im2DColored);
+}
+
+void
+Im2DTerminate(void)
+{
+ if(Im2DTexture){
+ Im2DTexture->destroy();
+ Im2DTexture = nil;
+ }
+}
+
+void
+Im2DRender(void)
+{
+ rw::SetRenderState(rw::ZTESTENABLE, 0);
+ rw::SetRenderState(rw::ZWRITEENABLE, 0);
+ rw::SetRenderState(rw::SRCBLEND, rw::BLENDSRCALPHA);
+ rw::SetRenderState(rw::DESTBLEND, rw::BLENDINVSRCALPHA);
+ rw::SetRenderState(rw::TEXTUREFILTER, rw::Texture::FilterMode::LINEAR);
+
+ if(Im2DTextured)
+ rw::SetRenderStatePtr(rw::TEXTURERASTER, Im2DTexture->raster);
+ else
+ rw::SetRenderStatePtr(rw::TEXTURERASTER, nil);
+
+ switch(Im2DPrimType){
+ case 0: LineListRender(); break;
+ case 1: IndexedLineListRender(); break;
+ case 2: PolyLineRender(); break;
+ case 3: IndexedPolyLineRender(); break;
+ case 4: TriListRender(); break;
+ case 5: IndexedTriListRender(); break;
+ case 6: TriStripRender(); break;
+ case 7: IndexedTriStripRender(); break;
+ case 8: TriFanRender(); break;
+ case 9: IndexedTriFanRender(); break;
+ }
+}
+
+void
+Im2DSize(rw::Camera *camera, rw::int32 w, rw::int32 h)
+{
+ ScreenSize.x = w;
+ ScreenSize.y = h;
+
+ if(ScreenSize.x > ScreenSize.y)
+ Scale = ScreenSize.y / 3.0f;
+ else
+ Scale = ScreenSize.x / 3.0f;
+
+ LineListCreate(camera);
+
+ IndexedLineListCreate(camera);
+
+ PolyLineCreate(camera);
+
+ IndexedPolyLineCreate(camera);
+
+ TriListCreate(camera);
+
+ IndexedTriListCreate(camera);
+
+ TriStripCreate(camera);
+
+ IndexedTriStripCreate(camera);
+
+ TriFanCreate(camera);
+
+ IndexedTriFanCreate(camera);
+}