Skip to content

Commit 38a9770

Browse files
committed
feat: expose texture array layer for Lua drawing
The renderer is capable of binding and drawing individual texture layers from 2D texture arrays. In the exporter and API we call these "stacked" textures and as such the parameter is the "stack layer". This improves on sprite sheets in that an individual image (quad) draw can pick from any layer of its texture while retaining the ability to have different wrapping/clamping modes and keeping any original mipmaps from before stacking. As this complicated the draw call parsing those are now parsed more modularly based on the number of arguments to also handle stack layers and also any possible future "mask" functionality we might want to draw a subset of an image. The immediate render interface now operates on vec2 values as the argument counts were becoming ridiculous.
1 parent 7ff8e02 commit 38a9770

7 files changed

Lines changed: 169 additions & 48 deletions

File tree

engine/render.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
// Render Global Header
55
//
66

7+
#include <glm/vec2.hpp>
8+
79
// =======
810
// Classes
911
// =======
@@ -88,8 +90,8 @@ class r_IRenderer {
8890
virtual void SetBlendMode(int mode) = 0;
8991
virtual void DrawColor(const col4_t col = NULL) = 0;
9092
virtual void DrawColor(dword col) = 0;
91-
virtual void DrawImage(r_shaderHnd_c* hnd, float x, float y, float w, float h, float s1 = 0.0f, float t1 = 0.0f, float s2 = 1.0f, float t2 = 1.0f) = 0;
92-
virtual void DrawImageQuad(r_shaderHnd_c* hnd, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 0, float s2 = 1, float t2 = 1, float s3 = 0, float t3 = 1) = 0;
93+
virtual void DrawImage(r_shaderHnd_c* hnd, glm::vec2 pos, glm::vec2 extent, glm::vec2 uv1 = { 0, 0 }, glm::vec2 uv2 = { 1, 1 }, int stackLayer = 0) = 0;
94+
virtual void DrawImageQuad(r_shaderHnd_c* hnd, glm::vec2 p0, glm::vec2 p1, glm::vec2 p2, glm::vec2 p3, glm::vec2 uv0 = { 0, 0 }, glm::vec2 uv1 = { 1, 0 }, glm::vec2 uv2 = { 1, 1 }, glm::vec2 uv3 = { 0, 1 }, int stackLayer = 0) = 0;
9395
virtual void DrawString(float x, float y, int align, int height, const col4_t col, int font, const char* str) = 0;
9496
virtual void DrawStringFormat(float x, float y, int align, int height, const col4_t col, int font, const char* fmt, ...) = 0;
9597
virtual int DrawStringWidth(int height, int font, const char* str) = 0;

engine/render/r_main.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ struct r_layerCmdQuad_s {
163163
float t[4];
164164
float x[4];
165165
float y[4];
166+
int stackLayer;
166167
} quad;
167168
};
168169

@@ -262,14 +263,15 @@ void r_layer_c::Color(col4_t col)
262263
}
263264
}
264265

265-
void r_layer_c::Quad(float s0, float t0, float x0, float y0, float s1, float t1, float x1, float y1, float s2, float t2, float x2, float y2, float s3, float t3, float x3, float y3)
266+
void r_layer_c::Quad(float s0, float t0, float x0, float y0, float s1, float t1, float x1, float y1, float s2, float t2, float x2, float y2, float s3, float t3, float x3, float y3, int stackLayer)
266267
{
267268
if (auto* cmd = (r_layerCmdQuad_s*)NewCommand(CommandSize(r_layerCmd_s::QUAD))) {
268269
cmd->cmd = r_layerCmd_s::QUAD;
269270
cmd->quad.s[0] = s0; cmd->quad.s[1] = s1; cmd->quad.s[2] = s2; cmd->quad.s[3] = s3;
270271
cmd->quad.t[0] = t0; cmd->quad.t[1] = t1; cmd->quad.t[2] = t2; cmd->quad.t[3] = t3;
271272
cmd->quad.x[0] = x0; cmd->quad.x[1] = x1; cmd->quad.x[2] = x2; cmd->quad.x[3] = x3;
272273
cmd->quad.y[0] = y0; cmd->quad.y[1] = y1; cmd->quad.y[2] = y2; cmd->quad.y[3] = y3;
274+
cmd->quad.stackLayer = stackLayer;
273275
}
274276
}
275277

@@ -534,6 +536,7 @@ struct AdjacentMergeStrategy : RenderStrategy {
534536
auto& vp = nextViewport_;
535537
q.u = c->quad.s[v];
536538
q.v = c->quad.t[v];
539+
q.w = (float)c->quad.stackLayer;
537540
q.x = c->quad.x[v];
538541
q.y = c->quad.y[v];
539542
q.r = tint_[0];
@@ -1284,14 +1287,14 @@ void r_renderer_c::EndFrame()
12841287
sprintf(str, "%zu (%4d,%4d) [%2d]", layerSort[l]->numCmd, layerSort[l]->layer, layerSort[l]->subLayer, l);
12851288
float w = (float)DrawStringWidth(16, F_FIXED, str);
12861289
DrawColor(0x7F000000);
1287-
DrawImage(NULL, (float)VirtualScreenWidth() - w, VirtualScreenHeight() - (l + 2) * 16.0f, w, 16);
1290+
DrawImage(NULL, { (float)VirtualScreenWidth() - w, VirtualScreenHeight() - (l + 2) * 16.0f }, { w, 16 });
12881291
DrawStringFormat(0, VirtualScreenHeight() - (l + 2) * 16.0f, F_RIGHT, 16, colorWhite, F_FIXED, str);
12891292
}
12901293
char str[1024];
12911294
sprintf(str, "%zu", totalCmd);
12921295
float w = (float)DrawStringWidth(16, F_FIXED, str);
12931296
DrawColor(0xAF000000);
1294-
DrawImage(NULL, (float)VirtualScreenWidth() - w, VirtualScreenHeight() - 16.0f, w, 16);
1297+
DrawImage(NULL, { (float)VirtualScreenWidth() - w, VirtualScreenHeight() - 16.0f }, { w, 16 });
12951298
DrawStringFormat(0, VirtualScreenHeight() - 16.0f, F_RIGHT, 16, colorWhite, F_FIXED, str);
12961299
}
12971300

@@ -1717,21 +1720,37 @@ void r_renderer_c::DrawColor(dword col)
17171720
drawColor[3] = (col >> 24) / 255.0f;
17181721
}
17191722

1720-
void r_renderer_c::DrawImage(r_shaderHnd_c* hnd, float x, float y, float w, float h, float s1, float t1, float s2, float t2)
1723+
void r_renderer_c::DrawImage(r_shaderHnd_c* hnd, glm::vec2 pos, glm::vec2 extent, glm::vec2 uv1, glm::vec2 uv2, int stackLayer)
17211724
{
1722-
DrawImageQuad(hnd, x, y, x + w, y, x + w, y + h, x, y + h, s1, t1, s2, t1, s2, t2, s1, t2);
1725+
DrawImageQuad(hnd,
1726+
pos,
1727+
pos + glm::vec2{ extent.x, 0 },
1728+
pos + extent,
1729+
pos + glm::vec2{ 0, extent.y },
1730+
uv1,
1731+
{ uv2.s, uv1.t },
1732+
uv2,
1733+
{ uv1.s, uv2.t },
1734+
stackLayer);
17231735
}
17241736

1725-
void r_renderer_c::DrawImageQuad(r_shaderHnd_c* hnd, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float s0, float t0, float s1, float t1, float s2, float t2, float s3, float t3)
1737+
void r_renderer_c::DrawImageQuad(r_shaderHnd_c* hnd, glm::vec2 p0, glm::vec2 p1, glm::vec2 p2, glm::vec2 p3, glm::vec2 uv0, glm::vec2 uv1, glm::vec2 uv2, glm::vec2 uv3, int stackLayer)
17261738
{
17271739
if (hnd) {
17281740
curLayer->Bind(hnd->sh->tex);
1741+
stackLayer = clamp(stackLayer, 0, (int)hnd->sh->tex->stackLayers - 1);
17291742
}
17301743
else {
17311744
curLayer->Bind(whiteImage->sh->tex);
1745+
stackLayer = 0;
17321746
}
17331747
curLayer->Color(drawColor);
1734-
curLayer->Quad(s0, t0, x0, y0, s1, t1, x1, y1, s2, t2, x2, y2, s3, t3, x3, y3);
1748+
curLayer->Quad(
1749+
uv0.s, uv0.t, p0.x, p0.y,
1750+
uv1.s, uv1.t, p1.x, p1.y,
1751+
uv2.s, uv2.t, p2.x, p2.y,
1752+
uv3.s, uv3.t, p3.x, p3.y,
1753+
stackLayer);
17351754
}
17361755

17371756
void r_renderer_c::DrawString(float x, float y, int align, int height, const col4_t col, int font, const char* str)

engine/render/r_main.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class r_layer_c {
4545
void SetBlendMode(int mode);
4646
void Bind(r_tex_c* tex);
4747
void Color(col4_t col);
48-
void Quad(float s0, float t0, float x0, float y0, float s1, float t1, float x1, float y1, float s2, float t2, float x2, float y2, float s3, float t3, float x3, float y3);
48+
void Quad(float s0, float t0, float x0, float y0, float s1, float t1, float x1, float y1, float s2, float t2, float x2, float y2, float s3, float t3, float x3, float y3, int stackLayer = 0);
4949
void Render();
5050
void Discard();
5151

@@ -89,8 +89,8 @@ class r_renderer_c: public r_IRenderer, public conCmdHandler_c {
8989
void SetBlendMode(int mode);
9090
void DrawColor(const col4_t col = NULL);
9191
void DrawColor(dword col);
92-
void DrawImage(r_shaderHnd_c* hnd, float x, float y, float w, float h, float s1 = 0.0f, float t1 = 0.0f, float s2 = 1.0f, float t2 = 1.0f);
93-
void DrawImageQuad(r_shaderHnd_c* hnd, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 0, float s2 = 1, float t2 = 1, float s3 = 0, float t3 = 1);
92+
void DrawImage(r_shaderHnd_c* hnd, glm::vec2 pos, glm::vec2 extent, glm::vec2 uv1 = { 0, 0 }, glm::vec2 uv2 = { 1, 1 }, int stackLayer = 0);
93+
void DrawImageQuad(r_shaderHnd_c* hnd, glm::vec2 p0, glm::vec2 p1, glm::vec2 p2, glm::vec2 p3, glm::vec2 uv0 = { 0, 0 }, glm::vec2 uv1 = { 1, 0 }, glm::vec2 uv2 = { 1, 1 }, glm::vec2 uv3 = { 0, 1 }, int stackLayer = 0);
9494
void DrawString(float x, float y, int align, int height, const col4_t col, int font, const char* str);
9595
void DrawStringFormat(float x, float y, int align, int height, const col4_t col, int font, const char* fmt, ...);
9696
int DrawStringWidth(int height, int font, const char* str);

engine/render/r_texture.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ void r_tex_c::LoadFile()
471471
};
472472
error = img->Load(loadPath.c_str(), sizeCallback);
473473
if ( !error ) {
474+
stackLayers = img->tex.layers();
474475
const bool is_async = !!(flags & TF_ASYNC);
475476
img = BuildMipSet(std::move(img));
476477

engine/render/r_texture.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class r_tex_c {
3737
std::atomic<dword> fileHeight;
3838
std::unique_ptr<image_c> img;
3939
GLenum target{};
40+
size_t stackLayers = 1;
4041

4142
r_tex_c(class r_ITexManager* manager, const char* fileName, int flags);
4243
r_tex_c(class r_ITexManager* manager, std::unique_ptr<image_c> img, int flags);

ui_api.cpp

Lines changed: 132 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959
** GetDrawLayer()
6060
** SetViewport([x, y, width, height])
6161
** SetDrawColor(red, green, blue[, alpha]) / SetDrawColor("<escapeStr>")
62-
** DrawImage({imgHandle|nil}, left, top, width, height[, tcLeft, tcTop, tcRight, tcBottom])
63-
** DrawImageQuad({imgHandle|nil}, x1, y1, x2, y2, x3, y3, x4, y4[, s1, t1, s2, t2, s3, t3, s4, t4])
62+
** DrawImage({imgHandle|nil}, left, top, width, height[, tcLeft, tcTop, tcRight, tcBottom][, stackIdx[, mask]]) mask: nil|"arc"|"circle" // TODO(zao): define how mask works, none implemented yet
63+
** DrawImageQuad({imgHandle|nil}, x1, y1, x2, y2, x3, y3, x4, y4[, s1, t1, s2, t2, s3, t3, s4, t4][, stackIdx[, mask]])
6464
** DrawString(left, top, align{"LEFT"|"CENTER"|"RIGHT"|"CENTER_X"|"RIGHT_X"}, height, font{"FIXED"|"VAR"|"VAR BOLD"}, "<text>")
6565
** width = DrawStringWidth(height, font{"FIXED"|"VAR"|"VAR BOLD"}, "<text>")
6666
** index = DrawStringCursorIndex(height, font{"FIXED"|"VAR"|"VAR BOLD"}, "<text>", cursorX, cursorY)
@@ -852,30 +852,77 @@ static int l_DrawImage(lua_State* L)
852852
ui->LAssert(L, ui->renderer != NULL, "Renderer is not initialised");
853853
ui->LAssert(L, ui->renderEnable, "DrawImage() called outside of OnFrame");
854854
int n = lua_gettop(L);
855-
ui->LAssert(L, n >= 5, "Usage: DrawImage({imgHandle|nil}, left, top, width, height[, tcLeft, tcTop, tcRight, tcBottom])");
855+
const char* usage = "Usage: DrawImage({imgHandle|nil}, left, top, width, height[, tcLeft, tcTop, tcRight, tcBottom][, stackIdx[, mask]])";
856+
ui->LAssert(L, n >= 5, usage);
856857
ui->LAssert(L, lua_isnil(L, 1) || ui->IsUserData(L, 1, "uiimghandlemeta"), "DrawImage() argument 1: expected image handle or nil, got %s", luaL_typename(L, 1));
857858
r_shaderHnd_c* hnd = NULL;
858-
if (!lua_isnil(L, 1)) {
859-
imgHandle_s* imgHandle = (imgHandle_s*)lua_touserdata(L, 1);
860-
ui->LAssert(L, imgHandle->hnd != NULL, "DrawImage(): image handle has no image loaded");
861-
hnd = imgHandle->hnd;
862-
}
863-
float arg[8];
864-
if (n > 5) {
865-
ui->LAssert(L, n >= 9, "DrawImage(): incomplete set of texture coordinates provided");
866-
for (int i = 2; i <= 9; i++) {
859+
glm::vec2 xys[2]{}, uvs[2]{};
860+
int stackLayer = 0;
861+
862+
// | n |img| corners | uvs | stack | mask |
863+
// | 5 | X | X | | | |
864+
// | 6 | X | X | | X | |
865+
// | 7 | X | X | | X | X |
866+
// | 9 | X | X | X | | |
867+
// | 10 | X | X | X | X | |
868+
// | 11 | X | X | X | X | X |
869+
870+
enum ArgFlag : uint8_t { AF_IMG = 0x1, AF_XY = 0x2, AF_UV = 0x4, AF_STACK = 0x8, AF_MASK = 0x10 };
871+
ArgFlag af{};
872+
switch (n) {
873+
case 11: af = (ArgFlag)(af | AF_MASK);
874+
case 10: af = (ArgFlag)(af | AF_STACK);
875+
case 9: af = (ArgFlag)(af | AF_IMG | AF_XY | AF_UV); break;
876+
case 7: af = (ArgFlag)(af | AF_MASK);
877+
case 6: af = (ArgFlag)(af | AF_STACK);
878+
case 5: af = (ArgFlag)(af | AF_IMG | AF_XY); break;
879+
default: ui->LAssert(L, false, usage);
880+
}
881+
882+
int k = 1;
883+
if (af & AF_IMG) {
884+
if (!lua_isnil(L, k)) {
885+
imgHandle_s* imgHandle = (imgHandle_s*)lua_touserdata(L, k);
886+
ui->LAssert(L, imgHandle->hnd != NULL, "DrawImage(): image handle has no image loaded");
887+
hnd = imgHandle->hnd;
888+
}
889+
k += 1;
890+
}
891+
892+
if (af & AF_XY) {
893+
for (int i = k; i < k + 4; i++) {
867894
ui->LAssert(L, lua_isnumber(L, i), "DrawImage() argument %d: expected number, got %s", i, luaL_typename(L, i));
868-
arg[i - 2] = (float)lua_tonumber(L, i);
895+
const int idx = i - k;
896+
xys[idx/2][idx%2] = (float)lua_tonumber(L, i);
869897
}
870-
ui->renderer->DrawImage(hnd, arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7]);
898+
k += 4;
871899
}
872-
else {
873-
for (int i = 2; i <= 5; i++) {
900+
901+
if (af & AF_UV) {
902+
for (int i = k; i < k + 4; i++) {
874903
ui->LAssert(L, lua_isnumber(L, i), "DrawImage() argument %d: expected number, got %s", i, luaL_typename(L, i));
875-
arg[i - 2] = (float)lua_tonumber(L, i);
904+
int idx = i - k;
905+
uvs[idx/2][idx%2] = (float)lua_tonumber(L, i);
876906
}
877-
ui->renderer->DrawImage(hnd, arg[0], arg[1], arg[2], arg[3]);
907+
k += 4;
908+
}
909+
else {
910+
uvs[0] = { 0, 0 };
911+
uvs[1] = { 1, 1 };
878912
}
913+
914+
if (af & AF_STACK) {
915+
ui->LAssert(L, lua_isinteger(L, k), "DrawImage() argument %d: expected integer, got %s", k, luaL_typename(L, k));
916+
stackLayer = (int)lua_tointeger(L, k);
917+
k += 1;
918+
}
919+
920+
if (af & AF_MASK) {
921+
ui->LAssert(L, lua_isnil(L, k) || lua_istable(L, k), "DrawImage() argument %d: expected integer or nil, got %s", k, luaL_typename(L, k));
922+
}
923+
924+
ui->renderer->DrawImage(hnd, xys[0], xys[1], uvs[0], uvs[1], stackLayer);
925+
879926
return 0;
880927
}
881928

@@ -885,30 +932,81 @@ static int l_DrawImageQuad(lua_State* L)
885932
ui->LAssert(L, ui->renderer != NULL, "Renderer is not initialised");
886933
ui->LAssert(L, ui->renderEnable, "DrawImageQuad() called outside of OnFrame");
887934
int n = lua_gettop(L);
888-
ui->LAssert(L, n >= 9, "Usage: DrawImageQuad({imgHandle|nil}, x1, y1, x2, y2, x3, y3, x4, y4[, s1, t1, s2, t2, s3, t3, s4, t4])");
935+
const char* usage = "Usage: DrawImageQuad({imgHandle|nil}, x1, y1, x2, y2, x3, y3, x4, y4[, s1, t1, s2, t2, s3, t3, s4, t4][, stackIdx[, mask]])";
936+
ui->LAssert(L, n >= 9, usage);
889937
ui->LAssert(L, lua_isnil(L, 1) || ui->IsUserData(L, 1, "uiimghandlemeta"), "DrawImageQuad() argument 1: expected image handle or nil, got %s", luaL_typename(L, 1));
938+
890939
r_shaderHnd_c* hnd = NULL;
891-
if (!lua_isnil(L, 1)) {
892-
imgHandle_s* imgHandle = (imgHandle_s*)lua_touserdata(L, 1);
893-
ui->LAssert(L, imgHandle->hnd != NULL, "DrawImageQuad(): image handle has no image loaded");
894-
hnd = imgHandle->hnd;
895-
}
896-
float arg[16];
897-
if (n > 9) {
898-
ui->LAssert(L, n >= 17, "DrawImageQuad(): incomplete set of texture coordinates provided");
899-
for (int i = 2; i <= 17; i++) {
940+
glm::vec2 xys[4]{}, uvs[4]{};
941+
int stackLayer{};
942+
943+
// | n |img| corners | uvs | stack | mask |
944+
// | 9 | X | X | | | |
945+
// | 10 | X | X | | X | |
946+
// | 11 | X | X | | X | X |
947+
// | 17 | X | X | X | | |
948+
// | 18 | X | X | X | X | |
949+
// | 19 | X | X | X | X | X |
950+
951+
enum ArgFlag : uint8_t { AF_IMG = 0x1, AF_XY = 0x2, AF_UV = 0x4, AF_STACK = 0x8, AF_MASK = 0x10 };
952+
ArgFlag af{};
953+
switch (n) {
954+
case 19: af = (ArgFlag)(af | AF_MASK);
955+
case 18: af = (ArgFlag)(af | AF_STACK);
956+
case 17: af = (ArgFlag)(af | AF_IMG | AF_XY | AF_UV); break;
957+
case 11: af = (ArgFlag)(af | AF_MASK);
958+
case 10: af = (ArgFlag)(af | AF_STACK);
959+
case 9: af = (ArgFlag)(af | AF_IMG | AF_XY); break;
960+
default: ui->LAssert(L, false, usage);
961+
}
962+
963+
int k = 1;
964+
if (af & AF_IMG) {
965+
if (!lua_isnil(L, k)) {
966+
imgHandle_s* imgHandle = (imgHandle_s*)lua_touserdata(L, k);
967+
ui->LAssert(L, imgHandle->hnd != NULL, "DrawImageQuad(): image handle has no image loaded");
968+
hnd = imgHandle->hnd;
969+
}
970+
k += 1;
971+
}
972+
973+
if (af & AF_XY) {
974+
for (int i = k; i < k + 8; i++) {
900975
ui->LAssert(L, lua_isnumber(L, i), "DrawImageQuad() argument %d: expected number, got %s", i, luaL_typename(L, i));
901-
arg[i - 2] = (float)lua_tonumber(L, i);
976+
const int idx = i - k;
977+
xys[idx / 2][idx % 2] = (float)lua_tonumber(L, i);
902978
}
903-
ui->renderer->DrawImageQuad(hnd, arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7], arg[8], arg[9], arg[10], arg[11], arg[12], arg[13], arg[14], arg[15]);
979+
k += 8;
904980
}
905-
else {
906-
for (int i = 2; i <= 9; i++) {
981+
982+
if (af & AF_UV) {
983+
for (int i = k; i < k + 8; i++) {
907984
ui->LAssert(L, lua_isnumber(L, i), "DrawImageQuad() argument %d: expected number, got %s", i, luaL_typename(L, i));
908-
arg[i - 2] = (float)lua_tonumber(L, i);
985+
int idx = i - k;
986+
uvs[idx / 2][idx % 2] = (float)lua_tonumber(L, i);
909987
}
910-
ui->renderer->DrawImageQuad(hnd, arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7]);
988+
k += 8;
989+
}
990+
else {
991+
uvs[0] = { 0, 0 };
992+
uvs[1] = { 1, 0 };
993+
uvs[2] = { 1, 1 };
994+
uvs[3] = { 0, 1 };
911995
}
996+
997+
if (af & AF_STACK) {
998+
ui->LAssert(L, lua_isinteger(L, k), "DrawImageQuad() argument %d: expected integer, got %s", k, luaL_typename(L, k));
999+
stackLayer = (int)lua_tointeger(L, k);
1000+
k += 1;
1001+
}
1002+
1003+
if (af & AF_MASK) {
1004+
ui->LAssert(L, lua_isnil(L, k) || lua_istable(L, k), "DrawImageQuad() argument %d: expected integer or nil, got %s", k, luaL_typename(L, k));
1005+
}
1006+
1007+
1008+
ui->renderer->DrawImageQuad(hnd, xys[0], xys[1], xys[2], xys[3], uvs[0], uvs[1], uvs[2], uvs[3], stackLayer);
1009+
9121010
return 0;
9131011
}
9141012

ui_console.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,9 @@ void ui_console_c::Render()
153153

154154
// Draw the background of the console
155155
renderer->DrawColor(colorBlack);
156-
renderer->DrawImage(NULL, 0, 0, uiw, backHeight);
156+
renderer->DrawImage(NULL, { 0, 0 }, { uiw, backHeight });
157157
renderer->DrawColor(0xFF007700);
158-
renderer->DrawImage(NULL, 0, backHeight - fontSize / 2.0f, uiw, fontSize / 2.0f);
158+
renderer->DrawImage(NULL, { 0, backHeight - fontSize / 2.0f }, { uiw, fontSize / 2.0f });
159159

160160
float basey = y - (float)fontSize;
161161
float liney;

0 commit comments

Comments
 (0)