Extended API and added support for custom position and size for
- TakeScreenshot <=> TakeScreenshotAtPosAndSize - GetScreenData <=> GetScreenDataFromPosAndSize
This commit is contained in:
parent
68f664afa4
commit
0d6153d2ad
10
src/core.c
10
src/core.c
|
|
@ -2555,8 +2555,14 @@ void SetConfigFlags(unsigned int flags)
|
||||||
// have their own internal file-systems, to dowload image to user file-system some additional mechanism is required
|
// have their own internal file-systems, to dowload image to user file-system some additional mechanism is required
|
||||||
void TakeScreenshot(const char *fileName)
|
void TakeScreenshot(const char *fileName)
|
||||||
{
|
{
|
||||||
unsigned char *imgData = rlReadScreenPixels(CORE.Window.render.width, CORE.Window.render.height);
|
Vector2 zeroPos = {0, 0};
|
||||||
Image image = { imgData, CORE.Window.render.width, CORE.Window.render.height, 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
|
TakeScreenshotAtPosAndSize(fileName, zeroPos, CORE.Window.render.width, CORE.Window.render.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TakeScreenshotAtPosAndSize(const char *fileName, Vector2 pos, int width, int height)
|
||||||
|
{
|
||||||
|
unsigned char *imgData = rlReadScreenPixelsWithPosition(pos, width, height);
|
||||||
|
Image image = { imgData, width, height, 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 };
|
||||||
|
|
||||||
char path[512] = { 0 };
|
char path[512] = { 0 };
|
||||||
#if defined(PLATFORM_ANDROID)
|
#if defined(PLATFORM_ANDROID)
|
||||||
|
|
|
||||||
|
|
@ -1002,6 +1002,8 @@ RLAPI double GetTime(void); // Returns ela
|
||||||
// Misc. functions
|
// Misc. functions
|
||||||
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
||||||
RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format)
|
RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format)
|
||||||
|
RLAPI void TakeScreenshotAtPosAndSize(const char *fileName, Vector2 pos, int width, int height);
|
||||||
|
|
||||||
RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS)
|
RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS)
|
||||||
|
|
||||||
RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR)
|
RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR)
|
||||||
|
|
@ -1261,6 +1263,7 @@ RLAPI void UpdateTexture(Texture2D texture, const void *pixels);
|
||||||
RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data
|
RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data
|
||||||
RLAPI Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image
|
RLAPI Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image
|
||||||
RLAPI Image GetScreenData(void); // Get pixel data from screen buffer and return an Image (screenshot)
|
RLAPI Image GetScreenData(void); // Get pixel data from screen buffer and return an Image (screenshot)
|
||||||
|
RLAPI Image GetScreenDataFromPosAndSize(Vector2 pos, int width, int height);
|
||||||
|
|
||||||
// Texture configuration functions
|
// Texture configuration functions
|
||||||
RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture
|
RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture
|
||||||
|
|
|
||||||
11
src/rlgl.h
11
src/rlgl.h
|
|
@ -588,6 +588,7 @@ RLAPI void rlUnloadTexture(unsigned int id); // Unl
|
||||||
RLAPI void rlGenerateMipmaps(Texture2D *texture); // Generate mipmap data for selected texture
|
RLAPI void rlGenerateMipmaps(Texture2D *texture); // Generate mipmap data for selected texture
|
||||||
RLAPI void *rlReadTexturePixels(Texture2D texture); // Read texture pixel data
|
RLAPI void *rlReadTexturePixels(Texture2D texture); // Read texture pixel data
|
||||||
RLAPI unsigned char *rlReadScreenPixels(int width, int height); // Read screen pixel data (color buffer)
|
RLAPI unsigned char *rlReadScreenPixels(int width, int height); // Read screen pixel data (color buffer)
|
||||||
|
RLAPI unsigned char *rlReadScreenPixelsWithPosition(Vector2 pos, int width, int height);
|
||||||
|
|
||||||
// Framebuffer management (fbo)
|
// Framebuffer management (fbo)
|
||||||
RLAPI unsigned int rlLoadFramebuffer(int width, int height); // Load an empty framebuffer
|
RLAPI unsigned int rlLoadFramebuffer(int width, int height); // Load an empty framebuffer
|
||||||
|
|
@ -2831,13 +2832,19 @@ void *rlReadTexturePixels(Texture2D texture)
|
||||||
|
|
||||||
|
|
||||||
// Read screen pixel data (color buffer)
|
// Read screen pixel data (color buffer)
|
||||||
unsigned char *rlReadScreenPixels(int width, int height)
|
unsigned char *rlReadScreenPixels(int width, int height)
|
||||||
|
{
|
||||||
|
Vector2 zeroPos = {0, 0};
|
||||||
|
return rlReadScreenPixelsWithPosition(zeroPos, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *rlReadScreenPixelsWithPosition(Vector2 pos, int width, int height)
|
||||||
{
|
{
|
||||||
unsigned char *screenData = (unsigned char *)RL_CALLOC(width*height*4, sizeof(unsigned char));
|
unsigned char *screenData = (unsigned char *)RL_CALLOC(width*height*4, sizeof(unsigned char));
|
||||||
|
|
||||||
// NOTE 1: glReadPixels returns image flipped vertically -> (0,0) is the bottom left corner of the framebuffer
|
// NOTE 1: glReadPixels returns image flipped vertically -> (0,0) is the bottom left corner of the framebuffer
|
||||||
// NOTE 2: We are getting alpha channel! Be careful, it can be transparent if not cleared properly!
|
// NOTE 2: We are getting alpha channel! Be careful, it can be transparent if not cleared properly!
|
||||||
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, screenData);
|
glReadPixels(pos.x, pos.y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, screenData);
|
||||||
|
|
||||||
// Flip image vertically!
|
// Flip image vertically!
|
||||||
unsigned char *imgData = (unsigned char *)RL_MALLOC(width*height*4*sizeof(unsigned char));
|
unsigned char *imgData = (unsigned char *)RL_MALLOC(width*height*4*sizeof(unsigned char));
|
||||||
|
|
|
||||||
|
|
@ -2938,14 +2938,20 @@ Image GetTextureData(Texture2D texture)
|
||||||
|
|
||||||
// Get pixel data from GPU frontbuffer and return an Image (screenshot)
|
// Get pixel data from GPU frontbuffer and return an Image (screenshot)
|
||||||
Image GetScreenData(void)
|
Image GetScreenData(void)
|
||||||
|
{
|
||||||
|
Vector2 zeroPos = {0, 0};
|
||||||
|
return GetScreenDataFromPosAndSize(zeroPos, GetScreenWidth(), GetScreenHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
Image GetScreenDataFromPosAndSize(Vector2 pos, int width, int height)
|
||||||
{
|
{
|
||||||
Image image = { 0 };
|
Image image = { 0 };
|
||||||
|
|
||||||
image.width = GetScreenWidth();
|
image.width = width;
|
||||||
image.height = GetScreenHeight();
|
image.height = height;
|
||||||
image.mipmaps = 1;
|
image.mipmaps = 1;
|
||||||
image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
||||||
image.data = rlReadScreenPixels(image.width, image.height);
|
image.data = rlReadScreenPixelsWithPosition(pos, image.width, image.height);
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user