mirror of
https://github.com/love2d/love.git
synced 2026-08-20 04:30:09 +02:00
love.graphics.newComputeShader;
This commit is contained in:
@@ -294,6 +294,18 @@ Shader *Graphics::newShader(const std::vector<std::string> &stagessource)
|
|||||||
return newShaderInternal(stages);
|
return newShaderInternal(stages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Shader *Graphics::newComputeShader(const std::string &source)
|
||||||
|
{
|
||||||
|
Shader::SourceInfo info = Shader::getSourceInfo(source);
|
||||||
|
|
||||||
|
if (info.stages[SHADERSTAGE_COMPUTE] == Shader::ENTRYPOINT_NONE)
|
||||||
|
throw love::Exception("Could not parse compute shader code (missing 'computemain' function?)");
|
||||||
|
|
||||||
|
StrongRef<ShaderStage> stages[SHADERSTAGE_MAX_ENUM];
|
||||||
|
stages[SHADERSTAGE_COMPUTE].set(newShaderStage(SHADERSTAGE_COMPUTE, source, info));
|
||||||
|
return newShaderInternal(stages);
|
||||||
|
}
|
||||||
|
|
||||||
Buffer *Graphics::newBuffer(const Buffer::Settings &settings, DataFormat format, const void *data, size_t size, size_t arraylength)
|
Buffer *Graphics::newBuffer(const Buffer::Settings &settings, DataFormat format, const void *data, size_t size, size_t arraylength)
|
||||||
{
|
{
|
||||||
std::vector<Buffer::DataDeclaration> dataformat = {{"", format, 0}};
|
std::vector<Buffer::DataDeclaration> dataformat = {{"", format, 0}};
|
||||||
|
|||||||
@@ -439,6 +439,7 @@ public:
|
|||||||
ParticleSystem *newParticleSystem(Texture *texture, int size);
|
ParticleSystem *newParticleSystem(Texture *texture, int size);
|
||||||
|
|
||||||
Shader *newShader(const std::vector<std::string> &stagessource);
|
Shader *newShader(const std::vector<std::string> &stagessource);
|
||||||
|
Shader *newComputeShader(const std::string &source);
|
||||||
|
|
||||||
virtual Buffer *newBuffer(const Buffer::Settings &settings, const std::vector<Buffer::DataDeclaration> &format, const void *data, size_t size, size_t arraylength) = 0;
|
virtual Buffer *newBuffer(const Buffer::Settings &settings, const std::vector<Buffer::DataDeclaration> &format, const void *data, size_t size, size_t arraylength) = 0;
|
||||||
virtual Buffer *newBuffer(const Buffer::Settings &settings, DataFormat format, const void *data, size_t size, size_t arraylength);
|
virtual Buffer *newBuffer(const Buffer::Settings &settings, DataFormat format, const void *data, size_t size, size_t arraylength);
|
||||||
|
|||||||
@@ -1458,6 +1458,34 @@ int w_newShader(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_newComputeShader(lua_State* L)
|
||||||
|
{
|
||||||
|
std::vector<std::string> stages;
|
||||||
|
w_getShaderSource(L, 1, stages);
|
||||||
|
|
||||||
|
bool should_error = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Shader *shader = instance()->newComputeShader(stages[0]);
|
||||||
|
luax_pushtype(L, shader);
|
||||||
|
shader->release();
|
||||||
|
}
|
||||||
|
catch (love::Exception &e)
|
||||||
|
{
|
||||||
|
luax_getfunction(L, "graphics", "_transformGLSLErrorMessages");
|
||||||
|
lua_pushstring(L, e.what());
|
||||||
|
|
||||||
|
// Function pushes the new error string onto the stack.
|
||||||
|
lua_pcall(L, 1, 1, 0);
|
||||||
|
should_error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (should_error)
|
||||||
|
return lua_error(L);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int w_validateShader(lua_State *L)
|
int w_validateShader(lua_State *L)
|
||||||
{
|
{
|
||||||
bool gles = luax_checkboolean(L, 1);
|
bool gles = luax_checkboolean(L, 1);
|
||||||
@@ -3415,6 +3443,7 @@ static const luaL_Reg functions[] =
|
|||||||
{ "newSpriteBatch", w_newSpriteBatch },
|
{ "newSpriteBatch", w_newSpriteBatch },
|
||||||
{ "newParticleSystem", w_newParticleSystem },
|
{ "newParticleSystem", w_newParticleSystem },
|
||||||
{ "newShader", w_newShader },
|
{ "newShader", w_newShader },
|
||||||
|
{ "newComputeShader", w_newComputeShader },
|
||||||
{ "newBuffer", w_newBuffer },
|
{ "newBuffer", w_newBuffer },
|
||||||
{ "newVertexBuffer", w_newVertexBuffer },
|
{ "newVertexBuffer", w_newVertexBuffer },
|
||||||
{ "newIndexBuffer", w_newIndexBuffer },
|
{ "newIndexBuffer", w_newIndexBuffer },
|
||||||
|
|||||||
Reference in New Issue
Block a user