Add rlBindImageTexture (untested), now requires SUPPORT_COMPILE_SHADERS

This commit is contained in:
TSnake41 2021-10-14 20:51:30 +02:00
parent d26b400ccc
commit 29f8958860

View File

@ -41,6 +41,10 @@
* #define SUPPORT_GL_DETAILS_INFO * #define SUPPORT_GL_DETAILS_INFO
* Show OpenGL extensions and capabilities detailed logs on init * Show OpenGL extensions and capabilities detailed logs on init
* *
* #define SUPPORT_COMPUTE_SHADERS
* Enable compute shaders and shader storage buffer object support.
* Currently only work with GRAPHICS_API_OPENGL_33 with appropriate driver support.
*
* rlgl capabilities could be customized just defining some internal * rlgl capabilities could be customized just defining some internal
* values before library inclusion (default values listed): * values before library inclusion (default values listed):
* *
@ -645,8 +649,9 @@ RLAPI void rlSetUniformMatrix(int locIndex, Matrix mat); //
RLAPI void rlSetUniformSampler(int locIndex, unsigned int textureId); // Set shader value sampler RLAPI void rlSetUniformSampler(int locIndex, unsigned int textureId); // Set shader value sampler
RLAPI void rlSetShader(unsigned int id, int *locs); // Set shader currently active (id and locations) RLAPI void rlSetShader(unsigned int id, int *locs); // Set shader currently active (id and locations)
#if defined(SUPPORT_COMPUTE_SHADERS)
// Compute shader management // Compute shader management
RLAPI unsigned int rlLoadComputeShaderProgram(int shaderId); RLAPI unsigned int rlLoadComputeShaderProgram(unsigned int shaderId);
RLAPI void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ); RLAPI void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ);
// Shader buffer storage object management (ssbo) // Shader buffer storage object management (ssbo)
@ -659,6 +664,8 @@ RLAPI void rlBindShaderBuffer(unsigned int id, unsigned int index);
// Buffer management // Buffer management
RLAPI void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned long long destOffset, unsigned long long srcOffset, unsigned long long count); RLAPI void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned long long destOffset, unsigned long long srcOffset, unsigned long long count);
RLAPI void rlBindImageTexture(unsigned int id, unsigned int index, unsigned int format, int readonly);
#endif
// Matrix state management // Matrix state management
RLAPI Matrix rlGetMatrixModelview(void); // Get internal modelview matrix RLAPI Matrix rlGetMatrixModelview(void); // Get internal modelview matrix
@ -3756,7 +3763,7 @@ void rlSetShader(unsigned int id, int *locs)
#endif #endif
} }
unsigned int rlLoadComputeShaderProgram(int shaderId) unsigned int rlLoadComputeShaderProgram(unsigned int shaderId)
{ {
unsigned int program = 0; unsigned int program = 0;
@ -3803,6 +3810,7 @@ unsigned int rlLoadComputeShaderProgram(int shaderId)
return program; return program;
} }
#if defined(SUPPORT_COMPUTE_SHADERS)
void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ) void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ)
{ {
#if defined(GRAPHICS_API_OPENGL_33) #if defined(GRAPHICS_API_OPENGL_33)
@ -3872,6 +3880,16 @@ void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned lon
#endif #endif
} }
void rlBindImageTexture(unsigned int id, unsigned int index, unsigned int format, int readonly)
{
#if defined(GRAPHICS_API_OPENGL_33)
int glInternalFormat = 0, glFormat = 0, glType = 0;
rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType);
glBindImageTexture(index, id, 0, 0, 0, readonly ? GL_READ_ONLY : GL_READ_WRITE, glInternalFormat);
#endif
}
#endif
// Matrix state management // Matrix state management
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------