Skip to content

GPU primitives #181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 64 commits into from
Jul 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
99a23ff
make clear_to_color fast for color = 0 and dst depth of 8
HeliumAnt Nov 21, 2024
ee63ad7
add allegro instrumentation
HeliumAnt Nov 21, 2024
89d3220
make BigTexture upload use stream buffer invalidation techinique
HeliumAnt Nov 21, 2024
76e9be4
use bigtexture infrastructure for sceneeditorgui
HeliumAnt Nov 21, 2024
b1ca37e
fix allegro save palette (TODO: remove allegro png save privilege)
HeliumAnt Nov 21, 2024
d7c6a67
use depth in more places
HeliumAnt Nov 21, 2024
d493d41
Changelog update
HeliumAnt Nov 21, 2024
4287046
format rlgl and start on uniform batch support
HeliumAnt Nov 22, 2024
629f414
add uniform batch configuration
HeliumAnt Nov 22, 2024
6b1f491
move primitives to gpu
HeliumAnt Nov 22, 2024
d94cb28
fix postprocess layer not being cleared
HeliumAnt Nov 22, 2024
cc9c17e
ignore targetbox offset on scenelayer upload
HeliumAnt Nov 22, 2024
2e9705c
format rshapes
HeliumAnt Nov 22, 2024
6271504
fix the incredibly messy primitive coordinate wrapping
HeliumAnt Nov 23, 2024
551c5e9
Merge branch 'development' into gpu-primitives
HeliumAnt Dec 27, 2024
622b097
add thickness to line primitive
HeliumAnt Dec 31, 2024
8310c77
fix ring centering
HeliumAnt Dec 31, 2024
cf16edd
render target zooming
HeliumAnt Dec 31, 2024
c1c13b1
Add zooming for debug purposes (is fun tho might keep)
HeliumAnt Jan 1, 2025
0531801
move primitives to renderer
HeliumAnt Jan 1, 2025
ce93907
make brain damage less agressive
HeliumAnt Jan 1, 2025
d91675a
add view matrix to shaders
HeliumAnt Jan 1, 2025
738cb03
start on removing lines mode
HeliumAnt Jan 1, 2025
78ab4df
preliminary work for unified wrapping code
HeliumAnt Jan 1, 2025
0b1b1c7
move zoom to view matrix
HeliumAnt Jan 1, 2025
6cda689
use tiled drawing
HeliumAnt Jan 1, 2025
01eeef5
fix screenshots
HeliumAnt Jan 6, 2025
f6de199
expose allegro->sdl_palette conversion
HeliumAnt Jan 6, 2025
c81b467
fix windows build
HeliumAnt Jan 18, 2025
cc672af
update changelog
HeliumAnt Mar 11, 2025
236637c
add extended blend modes support
HeliumAnt Mar 11, 2025
a8622de
add primitive depth
HeliumAnt Mar 11, 2025
a376366
add primitive depth
HeliumAnt Mar 11, 2025
544de8e
bitmap, text primitives in gpu
HeliumAnt Mar 11, 2025
72898a9
set shader defaults
HeliumAnt Mar 11, 2025
3da231d
add gpu blend modes, move primitive draw to frame man
HeliumAnt Mar 11, 2025
453ffd8
add gpu blendmode to frameman
HeliumAnt Mar 11, 2025
c9c82fa
gldestroytexture->rlunload
HeliumAnt Mar 11, 2025
ca95814
add draw depths to lua
HeliumAnt Mar 11, 2025
84aa93d
set gl compat profile
HeliumAnt Mar 11, 2025
8c81030
primitive gpu blend modes
HeliumAnt Mar 11, 2025
b4d3823
allow right alt on keyboards with AltGr
HeliumAnt Mar 11, 2025
25212ff
Merge branch 'development' into gpu-primitives
HeliumAnt Mar 11, 2025
9898b91
remove zoom
HeliumAnt Mar 11, 2025
937223e
remove zoom
HeliumAnt Mar 11, 2025
eba3fe7
missed merge conflict
HeliumAnt Mar 11, 2025
e04fcc1
add EXT guard for optional blend mode extension
HeliumAnt Mar 11, 2025
5f51504
zoom cleanup
HeliumAnt Mar 11, 2025
8d22b08
fix build errors
HeliumAnt Mar 11, 2025
05e622c
???
HeliumAnt Mar 11, 2025
a9f705c
add dissolve shader
HeliumAnt Mar 12, 2025
898d173
fix invert shading
HeliumAnt Mar 12, 2025
7bee365
dissolve support
HeliumAnt Mar 12, 2025
285cc6e
allow setting shader directly from presetman
HeliumAnt Mar 12, 2025
b612bd6
begin is techincally "const"
HeliumAnt Mar 12, 2025
05b1f8b
add available GL extensions to abort log
HeliumAnt Mar 12, 2025
cee003e
fix layout specification for blend equations and add sample shading d…
HeliumAnt Mar 12, 2025
1cd1141
don't clear main menu bg
HeliumAnt Mar 12, 2025
5141734
remove debug prints
HeliumAnt Mar 12, 2025
1163baf
Merge branch 'development' into gpu-primitives
HeliumAnt Mar 13, 2025
7982ff7
fix loading screen
HeliumAnt Mar 17, 2025
2cc08c4
Merge branch 'development' into gpu-primitives
HeliumAnt Jun 3, 2025
661b21c
flag AltGr (de keyboards) as alt.
HeliumAnt Jun 3, 2025
09f9469
update changes to sdl3; formatting
HeliumAnt Jun 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

- New `Attachable` INI and Lua (R/W) properties `InheritsVelWhenDetached` and `InheritsAngularVelWhenDetached`, which determine how much of these velocities an attachable inherits from its parent when detached. Defaults to 1.

- New GPU Renderer using OpenGL+Raylib, draw now takes 0ms in pretty much every instance.

- New Z Order for scene layers and primitives: Background layer sits at z=100, Terrain Background at z=50, Terrain color and MO color at z=0, GUIs sit at z=-100, allowed z range is [-200, +200], in the future this'll be expanded to MO draw as well.
- Added Lua-accessible bitmap manipulation functions to `MOSprite`s:
```
GetSpritePixelIndex(int x, int y, int whichFrame) - Returns the color index of the pixel at the given coordinate on the given frame of the sprite ((0, 0) is the upper left corner!)
Expand All @@ -103,6 +106,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

- New `SceneMan` function `CastAllMOsRay(startVector, rayVector, table ignoreMOIDs, ignoreTeam, ignoreMaterial, bool ignoreAllTerrain, int skip)` which returns an iterator with pointers to all the non-ignored MOs met along the ray.

- New parameter `depth` for all primitives sets draw depth of the drawn primitive. The default depth is -75.0 (lower numbers draw on top, higher numbers in the back).

- New `DrawDepth` enum for default draw depths:
- `Default` = 0.0f (Main draw depth for MOs)
- `GUI` = -100.0f (Draw Depth of GUI elements)
- `Primitive` = -75.0f (Default Primitive draw depth)
- `TerrainBackground` = 50.0f (Draw Depth of Terrain Background layer)
- `Background` = 100.0f (Draw Depth of Background layer)

- Added scaling capability to Bitmap primitives.
New draw bindings with argument for scale are:
```
Expand Down Expand Up @@ -168,6 +180,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

- `InheritsVel` and its ilk have been uncapped, allowing users to set them outside of 0-1.

- Lua renamed `SceneLayer`->`StaticSceneLayer` due to changed SLBackground base class.

- `Scene` Lua functions `AddNavigatableArea(areaName)` and `ClearNavigatableAreas()` have been renamed/corrected to `AddNavigableArea(areaName)` and `ClearNavigableAreas()`, respectively.

- `MOSRotating` Lua function `AddWound` now additionally accepts the format `MOSRotating:AddWound(AEmitter* woundToAdd, const Vector& parentOffsetToSet, bool checkGibWoundLimit, bool isEntryWound, bool isExitWound)`, allowing modders to specify added wounds as entry- or exit wounds, for the purpose of not playing multiple burst sounds on the same frame. These new arguments are optional.
Expand Down Expand Up @@ -204,6 +218,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

- Fixed an issue where internal Lua functions OriginalDoFile, OriginalLoadFile, and OriginalRequire were polluting the global namespace. They have now been made inaccessible.

- Fixed the palette being mangled to 6bit/color on load.

- Fixed allegro not loading alpha of image with alpha by using SDL_image instead.
- Fixed `MOSprite:UnRotateOffset()` giving the wrong results on HFLipped sprites.

- Various fixes and improvements to inventory management when dual-wielding or carrying a shield, to stop situations where the actor unexpectedly puts their items away.
Expand Down
19 changes: 14 additions & 5 deletions Data/Base.rte/Shaders/Background.frag
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
#version 130
#version 330
#extension GL_KHR_blend_equation_advanced: enable
#extension GL_ARB_sample_shading: enable

in vec2 textureUV;
in vec4 vertexColor;

#ifdef GL_KHR_blend_equation_advanced
layout(blend_support_all_equations) out;
#endif
out vec4 FragColor;

uniform sampler2D rteTexture;
uniform sampler2D rtePalette;
uniform vec4 rteColor;
uniform bool drawMasked;
uniform vec4 rteColor = vec4(1.0);
uniform bool rteBlendInvert = false;
uniform bool drawMasked = false;


vec4 texture2DAA(sampler2D tex, vec2 uv) {
Expand All @@ -25,5 +30,9 @@ void main() {
if (red==0 && drawMasked) {
discard;
}
FragColor = texture2DAA(rtePalette, vec2(red * rteColor.r * vertexColor.r, 0.0)) * vec4(vec3(1.0), rteColor.a * vertexColor.a);
if (!rteBlendInvert) {
FragColor = texture2DAA(rtePalette, vec2(red * vertexColor.r, 0.0)) * vec4(rteColor.rgb, rteColor.a * vertexColor.a);
} else {
FragColor = vec4(vec3(1.0), 0.0) - (texture2DAA(rtePalette, vec2(red * vertexColor.r, 0.0)) * vec4(rteColor.rgb, -rteColor.a * vertexColor.a));
}
}
4 changes: 2 additions & 2 deletions Data/Base.rte/Shaders/Blit8.vert
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ in vec4 rteVertexColor;

out vec2 textureUV;
out vec4 vertexColor;
//uniform mat4 rteModelViewProjection;
uniform mat4 rteView;
uniform mat4 rteProjection;

void main() {
gl_Position = rteProjection * vec4(rteVertexPosition, 1.0);
gl_Position = rteProjection * rteView * vec4(rteVertexPosition, 1.0);
textureUV = rteVertexTexUV;
vertexColor = rteVertexColor;
}
52 changes: 52 additions & 0 deletions Data/Base.rte/Shaders/Dissolve.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#version 130

in vec2 textureUV;
in vec4 vertexColor;

out vec4 FragColor;

uniform sampler2D rteTexture;
uniform sampler2D rtePalette;
uniform vec4 rteColor;

// Pseudo random number generator.
float hash( vec2 a )
{
return fract( sin( a.x * 3433.8 + a.y * 3843.98 ) * 45933.8 );
}

// Value noise courtesy of BigWingz
// check his youtube channel he has
// a video of this one.
// Succint version by FabriceNeyret
float noise( vec2 U )
{
vec2 id = floor( U );
U = fract( U );
U *= U * ( 3. - 2. * U );

vec2 A = vec2( hash(id), hash(id + vec2(0,1)) );
vec2 B = vec2( hash(id + vec2(1,0)), hash(id + vec2(1,1)) );
vec2 C = mix( A, B, U.x);

return mix( C.x, C.y, U.y );
}

vec4 texture2DAA(sampler2D tex, vec2 uv) {
vec2 texsize = vec2(textureSize(tex, 0));
vec2 uv_texspace = uv * texsize;
vec2 seam = floor(uv_texspace + .5);
uv_texspace = (uv_texspace - seam) / fwidth(uv_texspace) + seam;
uv_texspace = clamp(uv_texspace, seam - .5, seam + .5);
return texture(tex, uv_texspace / texsize);
}

void main() {
if (noise(gl_FragCoord.xy + textureUV) < 0.5) {
discard;
}
float red = texture2D(rteTexture, textureUV).r;
vec4 color = texture2DAA(rtePalette, vec2(red * vertexColor.r, 0.0)) * vec4(rteColor.rgb, rteColor.a * vertexColor.a);

FragColor = color;
}
4 changes: 2 additions & 2 deletions Data/Base.rte/Shaders/PostProcess.vert
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ in vec4 rteVertexColor;
out vec2 textureUV;
out vec4 vertexColor;

uniform mat4 rteModel;
uniform mat4 rteView;
uniform mat4 rteProjection;

void main() {
gl_Position = rteProjection * rteModel * vec4(rteVertexPosition, 1.0);
gl_Position = rteProjection * rteView * vec4(rteVertexPosition, 1.0);
vertexColor = rteVertexColor;
textureUV = rteVertexTexUV;
}
4 changes: 2 additions & 2 deletions Data/Base.rte/Shaders/ScreenBlit.vert
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ in vec2 rteVertexTexUV;

out vec2 textureUV;

uniform mat4 rteModel;
uniform mat4 rteView;
uniform mat4 rteProjection;

void main() {
gl_Position = rteProjection * rteModel * vec4(rteVertexPosition, 1.0);
gl_Position = rteProjection * rteView * vec4(rteVertexPosition, 1.0);
textureUV = rteVertexTexUV;
}
5 changes: 5 additions & 0 deletions Data/Base.rte/Shaders/Shaders.ini
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,8 @@ AddShader = Shader
PresetName = Background
VertexShader = Base.rte/Shaders/Blit8.vert
FragmentShader = Base.rte/Shaders/Background.frag

AddShader = Shader
PresetName = Dissolve
VertexShader = Base.rte/Shaders/Blit8.vert
FragmentShader = Base.rte/Shaders/Dissolve.frag
4 changes: 2 additions & 2 deletions RTEA.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -801,7 +801,7 @@
<ClInclude Include="Source\Renderer\GLCheck.h" />
<ClInclude Include="Source\System\InputMapping.h" />
<ClInclude Include="Source\System\InputScheme.h" />
<ClInclude Include="Source\System\GraphicalPrimitive.h" />
<ClInclude Include="Source\Renderer\GraphicalPrimitive.h" />
<ClInclude Include="Source\System\Gamepad.h" />
<ClInclude Include="Source\Menus\InventoryMenuGUI.h" />
<ClInclude Include="Source\System\PieQuadrant.h" />
Expand Down Expand Up @@ -1324,7 +1324,7 @@
<ClCompile Include="Source\Renderer\GLCheck.cpp" />
<ClCompile Include="Source\System\InputMapping.cpp" />
<ClCompile Include="Source\System\InputScheme.cpp" />
<ClCompile Include="Source\System\GraphicalPrimitive.cpp" />
<ClCompile Include="Source\Renderer\GraphicalPrimitive.cpp" />
<ClCompile Include="Source\System\PieQuadrant.cpp" />
<ClCompile Include="Source\System\Semver200\Semver200_comparator.cpp" />
<ClCompile Include="Source\System\Semver200\Semver200_modifier.cpp" />
Expand Down
8 changes: 4 additions & 4 deletions RTEA.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -499,8 +499,8 @@
<ClInclude Include="Source\Entities\Activity.h">
<Filter>Entities</Filter>
</ClInclude>
<ClInclude Include="Source\System\GraphicalPrimitive.h">
<Filter>System</Filter>
<ClInclude Include="Source\Renderer\GraphicalPrimitive.h">
<Filter>Renderer</Filter>
</ClInclude>
<ClInclude Include="Source\Menus\TitleScreen.h">
<Filter>Menus</Filter>
Expand Down Expand Up @@ -1080,8 +1080,8 @@
<ClCompile Include="Source\Entities\Activity.cpp">
<Filter>Entities</Filter>
</ClCompile>
<ClCompile Include="Source\System\GraphicalPrimitive.cpp">
<Filter>System</Filter>
<ClCompile Include="Source\Renderer\GraphicalPrimitive.cpp">
<Filter>Renderer</Filter>
</ClCompile>
<ClCompile Include="Source\Menus\TitleScreen.cpp">
<Filter>Menus</Filter>
Expand Down
2 changes: 2 additions & 0 deletions Source/Entities/PieMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -636,6 +636,7 @@ void PieMenu::Draw(BITMAP* targetBitmap, const Vector& targetPos) const {
Vector drawPos;
CalculateDrawPosition(targetBitmap, targetPos, drawPos);

rlZDepth(c_GuiDepth);
if (m_EnabledState != EnabledState::Disabled) {
if (m_DrawBackgroundTransparent) {
g_FrameMan.SetTransTableFromPreset(TransparencyPreset::MoreTrans);
Expand All @@ -646,6 +647,7 @@ void PieMenu::Draw(BITMAP* targetBitmap, const Vector& targetPos) const {
DrawTexture(g_GLResourceMan.GetStaticTextureFromBitmap(m_BGBitmap), drawPos.GetFloorIntX() - m_BGBitmap->w / 2, drawPos.GetFloorIntY() - m_BGBitmap->h / 2, {255, 255, 255, 255});
}
}
rlZDepth(c_DefaultDrawDepth);

if (m_EnabledState == EnabledState::Enabled) {
DrawPieIcons(targetBitmap, drawPos);
Expand Down
4 changes: 2 additions & 2 deletions Source/Entities/SceneLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -432,10 +432,10 @@ void SceneLayerImpl<TRACK_DRAWINGS, STATIC_TEXTURE>::UpdateTargetRegion(const Bo
Box bitmapDimensions(Vector(), bitmapWidth, bitmapHeight);

for (int tiledOffsetX = 0; tiledOffsetX < areaToCoverX;) {
float destX = scaledTarget.GetCorner().GetFloorIntX() + tiledOffsetX - scaledOffset.GetFloorIntX();
float destX = tiledOffsetX - scaledOffset.GetFloorIntX();

for (int tiledOffsetY = 0; tiledOffsetY < areaToCoverY;) {
float destY = scaledTarget.GetCorner().GetFloorIntY() + tiledOffsetY - scaledOffset.GetFloorIntY();
float destY = tiledOffsetY - scaledOffset.GetFloorIntY();
Box update = bitmapDimensions.GetIntersection({-Vector(destX, destY), scaledTarget.m_Width, scaledTarget.m_Height});
update.m_Corner = update.m_Corner.GetFloored();
update.m_Width = std::ceil(update.m_Width) + 1;
Expand Down
1 change: 1 addition & 0 deletions Source/Lua/LuaBindingRegisterDefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -302,5 +302,6 @@ namespace RTE {
LuaBindingRegisterFunctionDeclarationForType(AlarmEvent);
LuaBindingRegisterFunctionDeclarationForType(Directions);
LuaBindingRegisterFunctionDeclarationForType(DrawBlendMode);
LuaBindingRegisterFunctionDeclarationForType(DrawDepth);
};
} // namespace RTE
11 changes: 11 additions & 0 deletions Source/Lua/LuaBindingsMisc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,14 @@ LuaBindingRegisterFunctionDefinitionForType(MiscLuaBindings, DrawBlendMode) {
luabind::value("Transparency", DrawBlendMode::BlendTransparency),
luabind::value("BlendModeCount", DrawBlendMode::BlendModeCount)];
}

LuaBindingRegisterFunctionDefinitionForType(MiscLuaBindings, DrawDepth) {
return luabind::class_<draw_depths>("DrawDepth")
.enum_("DrawDepth")[
luabind::value("Default", c_DefaultDrawDepth),
luabind::value("GUI", c_GuiDepth),
luabind::value("Primitive", c_PrimitiveDepth),
luabind::value("TerrainBackground", c_TerrainBGDepth),
luabind::value("Background", c_BackgroundDepth)
];
}
47 changes: 32 additions & 15 deletions Source/Lua/LuaBindingsPrimitives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,85 +11,100 @@ LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, GraphicalPrimi
LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, LinePrimitive) {
return luabind::class_<LinePrimitive, GraphicalPrimitive>("LinePrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, float, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, float, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, ArcPrimitive) {
return luabind::class_<ArcPrimitive, GraphicalPrimitive>("ArcPrimitive")

.def(luabind::constructor<int, const Vector&, float, float, int, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, float, float, int, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, float, float, int, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, SplinePrimitive) {
return luabind::class_<SplinePrimitive, GraphicalPrimitive>("SplinePrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, const Vector&, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, BoxPrimitive) {
return luabind::class_<BoxPrimitive, GraphicalPrimitive>("BoxPrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, BoxFillPrimitive) {
return luabind::class_<BoxFillPrimitive, GraphicalPrimitive>("BoxFillPrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, RoundedBoxPrimitive) {
return luabind::class_<RoundedBoxPrimitive, GraphicalPrimitive>("RoundedBoxPrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, RoundedBoxFillPrimitive) {
return luabind::class_<RoundedBoxFillPrimitive, GraphicalPrimitive>("RoundedBoxFillPrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, CirclePrimitive) {
return luabind::class_<CirclePrimitive, GraphicalPrimitive>("CirclePrimitive")

.def(luabind::constructor<int, const Vector&, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, CircleFillPrimitive) {
return luabind::class_<CircleFillPrimitive, GraphicalPrimitive>("CircleFillPrimitive")

.def(luabind::constructor<int, const Vector&, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, EllipsePrimitive) {
return luabind::class_<EllipsePrimitive, GraphicalPrimitive>("EllipsePrimitive")

.def(luabind::constructor<int, const Vector&, int, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, int, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, int, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, EllipseFillPrimitive) {
return luabind::class_<EllipseFillPrimitive, GraphicalPrimitive>("EllipseFillPrimitive")

.def(luabind::constructor<int, const Vector&, int, int, unsigned char>());
.def(luabind::constructor<int, const Vector&, int, int, unsigned char>())
.def(luabind::constructor<int, const Vector&, int, int, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, TrianglePrimitive) {
return luabind::class_<TrianglePrimitive, GraphicalPrimitive>("TrianglePrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, TriangleFillPrimitive) {
return luabind::class_<TriangleFillPrimitive, GraphicalPrimitive>("TriangleFillPrimitive")

.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char>());
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char>())
.def(luabind::constructor<int, const Vector&, const Vector&, const Vector&, unsigned char, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, TextPrimitive) {
return luabind::class_<TextPrimitive, GraphicalPrimitive>("TextPrimitive")

.def(luabind::constructor<int, const Vector&, const std::string&, bool, int, float>());
.def(luabind::constructor<int, const Vector&, const std::string&, bool, int, float>())
.def(luabind::constructor<int, const Vector&, const std::string&, bool, int, float, float>());
}

LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, BitmapPrimitive) {
Expand All @@ -98,5 +113,7 @@ LuaBindingRegisterFunctionDefinitionForType(PrimitiveLuaBindings, BitmapPrimitiv
.def(luabind::constructor<int, const Vector&, const MOSprite*, float, unsigned int, float, bool, bool>())
.def(luabind::constructor<int, const Vector&, const std::string&, float, float, bool, bool>())
.def(luabind::constructor<int, const Vector&, const MOSprite*, float, unsigned int, bool, bool>())
.def(luabind::constructor<int, const Vector&, const std::string&, float, bool, bool>());
.def(luabind::constructor<int, const Vector&, const MOSprite*, float, unsigned int, bool, bool, float>())
.def(luabind::constructor<int, const Vector&, const std::string&, float, bool, bool>())
.def(luabind::constructor<int, const Vector&, const std::string&, float, bool, bool, float>());
}
Loading