Testing out render texture pixel manipulation and fixed full screen resize bug

This commit is contained in:
Bobby Lucero 2024-04-19 14:31:11 -04:00
parent 905cb90588
commit b8fcb14d0c
2 changed files with 113 additions and 16 deletions

View File

@ -4,11 +4,15 @@
using namespace std;
const int virtualScreenWidth = 240;
const int virtualScreenHeight = 136;
const int virtualScreenWidth = 360;
const int virtualScreenHeight = 203;
const int initialScale = 3;
int screenWidth = virtualScreenWidth * 4;
int screenHeight = virtualScreenHeight * 4;
int startupScreenWidth = virtualScreenWidth * initialScale;
int startupScreenHeight = virtualScreenHeight * initialScale;
int screenWidth = startupScreenWidth;
int screenHeight = startupScreenHeight;
void calculateBounds(Rectangle& bounds, Vector2& origin) {
@ -29,12 +33,15 @@ void calculateBounds(Rectangle& bounds, Vector2& origin) {
}
int main() {
const float virtualRatio = (float)screenWidth/(float)virtualScreenWidth;
SetTraceLogLevel(LOG_ERROR);
bool flip = false;
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
InitWindow(screenWidth, screenHeight, "test");
SetTargetFPS(60);
InitWindow(startupScreenWidth, startupScreenHeight, "test");
SetTargetFPS(-1);
RenderTexture2D virtualScreen = LoadRenderTexture(virtualScreenWidth, virtualScreenHeight);
Rectangle sourceRec = { 0.0f, 0.0f, (float)virtualScreen.texture.width, -(float)virtualScreen.texture.height };
@ -44,7 +51,6 @@ int main() {
pkpy::VM* vm = new pkpy::VM();
Texture2D logo = LoadTexture("resources/img.png");
try {
@ -65,18 +71,27 @@ int main() {
}
if (IsKeyPressed(KEY_F)) {
if(IsWindowFullscreen()){
ToggleFullscreen();
SetWindowSize(startupScreenWidth, startupScreenHeight);
screenWidth = startupScreenWidth;
screenHeight = startupScreenHeight;
}else{
int monitor = GetCurrentMonitor();
SetWindowSize(GetMonitorWidth(monitor), GetMonitorHeight(monitor));
screenWidth = GetScreenWidth();
screenHeight = GetScreenHeight();
calculateBounds(virtualScreenBounds, origin);
screenWidth = GetMonitorWidth(monitor);
screenHeight = GetMonitorHeight(monitor);
ToggleFullscreen();
}
calculateBounds(virtualScreenBounds, origin);
}else if(IsKeyPressed(KEY_I)){
flip = !flip;
}
BeginTextureMode(virtualScreen);
ClearBackground(GRAY);
DrawText("Hello World", 5, 5, 5, RAYWHITE);
DrawTexture(logo, 5, 20, WHITE);
ClearBackground(BLUE);
DrawText(("Hello World " + to_string(GetFPS()) + " FPS").c_str(), 5, 5, 5, RAYWHITE);
DrawTexture(logo, 80 + cos(GetTime()) * (virtualScreenHeight / 4), (virtualScreenHeight / 2) + sin(GetTime()) * (virtualScreenHeight / 4) - 29, WHITE);
DrawLineBezier((Vector2){80, 20}, (Vector2){virtualScreenWidth - 5, virtualScreenHeight - 5}, 1, GREEN);
DrawCircle(virtualScreenWidth / 2, virtualScreenHeight / 2, 15, GREEN);
DrawCircle(virtualScreenWidth / 2, virtualScreenHeight / 2, 13, YELLOW);
@ -87,6 +102,24 @@ int main() {
EndTextureMode();
if(flip){
// Get texture data
Image img = LoadImageFromTexture(virtualScreen.texture);
Color* pixels = LoadImageColors(img);
// Modify pixel data
for (int y = 0; y < img.height; y++) {
for (int x = 0; x < img.width; x++) {
// Example: Invert colors
Color pixel = pixels[y * img.width + x];
pixels[y * img.width + x] = { (unsigned char)(255 - pixel.g), (unsigned char)(255 - pixel.r), (unsigned char)(255 - pixel.b), pixel.a };
}
}
// Update texture with modified data
UpdateTexture(virtualScreen.texture, pixels);
}
BeginDrawing();
ClearBackground(BLACK);
DrawTexturePro(virtualScreen.texture, sourceRec, virtualScreenBounds, origin, 0.0f, WHITE);

64
resources/palette.hex Normal file
View File

@ -0,0 +1,64 @@
211d25
413d42
5c5b63
7c808b
a5b0b6
d6dede
ffffff
dcded1
aab1a1
7b8375
585f57
3c3c3c
635d5a
8d837d
b4aea4
dedcd1
eadedf
bcacb1
8f8189
685d66
643747
b2434d
e55858
fa8971
ffb999
ffe0b7
ffbdc1
ef93b5
c971a2
944e89
4c3d57
5d558f
777dc4
96b1e7
bedef6
aae3db
5ac5ce
4694a8
346376
2a3b4a
29684a
379648
79b547
b8cf61
f3db6f
f4ba7a
e79055
ce6442
944940
91555d
b76f6b
cd9383
e1ba9e
facafb
d49ce5
9f76b8
725689
edb762
fcfbc9
de9463
b66a4d
333f29
4e5c2c
708939