mirror of
https://github.com/aap/librw.git
synced 2024-12-18 06:34:50 +00:00
135 lines
2.8 KiB
C++
135 lines
2.8 KiB
C++
|
#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);
|
||
|
}
|