lovr.graphics.compute;

This commit is contained in:
bjorn 2018-08-08 17:53:59 -07:00
parent 2cb6de47f2
commit 3b51056870
3 changed files with 18 additions and 0 deletions

View File

@ -857,6 +857,15 @@ int l_lovrGraphicsFill(lua_State* L) {
return 0;
}
int l_lovrGraphicsCompute(lua_State* L) {
Shader* shader = luax_checktype(L, 1, Shader);
int x = luaL_optinteger(L, 1, 1);
int y = luaL_optinteger(L, 2, 1);
int z = luaL_optinteger(L, 3, 1);
lovrGraphicsCompute(shader, x, y, z);
return 0;
}
// Types
int l_lovrGraphicsNewAnimator(lua_State* L) {
@ -1276,6 +1285,7 @@ const luaL_Reg lovrGraphics[] = {
{ "print", l_lovrGraphicsPrint },
{ "stencil", l_lovrGraphicsStencil },
{ "fill", l_lovrGraphicsFill },
{ "compute", l_lovrGraphicsCompute },
// Types
{ "newAnimator", l_lovrGraphicsNewAnimator },

View File

@ -234,6 +234,7 @@ void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
void lovrGraphicsStencil(StencilAction action, int replaceValue, StencilCallback callback, void* userdata);
void lovrGraphicsFill(Texture* texture);
#define lovrGraphicsCompute lovrGpuCompute
// GPU
@ -243,6 +244,7 @@ void lovrGpuInit(bool srgb, gpuProc (*getProcAddress)(const char*));
void lovrGpuDestroy();
void lovrGpuClear(Canvas** canvas, int canvasCount, Color* color, float* depth, int* stencil);
void lovrGpuDraw(DrawCommand* command);
void lovrGpuCompute(Shader* shader, int x, int y, int z);
void lovrGpuPresent();
void lovrGpuBindTexture(Texture* texture, int slot);

View File

@ -853,6 +853,12 @@ void lovrGpuDraw(DrawCommand* command) {
}
}
void lovrGpuCompute(Shader* shader, int x, int y, int z) {
lovrAssert(shader->type == SHADER_COMPUTE, "Attempt to use a non-compute shader for a compute operation");
lovrGpuUseProgram(shader->program);
glDispatchCompute(x, y, z);
}
void lovrGpuPresent() {
memset(&state.stats, 0, sizeof(state.stats));
#ifdef __APPLE__