- Pasat a SDL3, a vore si funciona en altre comp
This commit is contained in:
4
Makefile
4
Makefile
@@ -1,5 +1,5 @@
|
|||||||
windows:
|
windows:
|
||||||
g++ *.cpp -lmingw32 -lSDL2main -lSDL2 -lopengl32 -mwindows -o shaders
|
g++ *.cpp -lmingw32 -lSDL3main -lSDL3 -lopengl32 -mwindows -o shaders
|
||||||
|
|
||||||
linux:
|
linux:
|
||||||
g++ -g *.cpp -lSDL2 -lGL -o shaders
|
g++ -g *.cpp -lSDL3 -lGL -o shaders
|
||||||
|
|||||||
34
jshader.cpp
34
jshader.cpp
@@ -12,8 +12,8 @@
|
|||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
#endif //!ESSENTIAL_GL_PRACTICES_SUPPORT_GL3
|
#endif //!ESSENTIAL_GL_PRACTICES_SUPPORT_GL3
|
||||||
#else
|
#else
|
||||||
#include <SDL2/SDL_opengl.h>
|
#include <SDL3/SDL_opengl.h>
|
||||||
#include <SDL2/SDL_opengl_glext.h>
|
#include <SDL3/SDL_opengl_glext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace shader
|
namespace shader
|
||||||
@@ -23,7 +23,7 @@ namespace shader
|
|||||||
GLuint programId = 0;
|
GLuint programId = 0;
|
||||||
SDL_Texture* backBuffer = nullptr;
|
SDL_Texture* backBuffer = nullptr;
|
||||||
SDL_Point win_size = {640, 480};
|
SDL_Point win_size = {640, 480};
|
||||||
SDL_Point tex_size = {320, 240};
|
SDL_FPoint tex_size = {320, 240};
|
||||||
bool usingOpenGL;
|
bool usingOpenGL;
|
||||||
|
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
@@ -141,18 +141,20 @@ namespace shader
|
|||||||
shader::renderer = SDL_GetRenderer(win);
|
shader::renderer = SDL_GetRenderer(win);
|
||||||
shader::backBuffer = backBuffer;
|
shader::backBuffer = backBuffer;
|
||||||
SDL_GetWindowSize(win, &win_size.x, &win_size.y);
|
SDL_GetWindowSize(win, &win_size.x, &win_size.y);
|
||||||
int access;
|
SDL_GetTextureSize(backBuffer, &tex_size.x, &tex_size.y);
|
||||||
SDL_QueryTexture(backBuffer, NULL, &access, &tex_size.x, &tex_size.y);
|
printf("tex size: %fx%f\n", tex_size.x, tex_size.y);
|
||||||
|
SDL_PropertiesID props = SDL_GetTextureProperties(backBuffer);
|
||||||
|
int access = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, -1);
|
||||||
if (access != SDL_TEXTUREACCESS_TARGET)
|
if (access != SDL_TEXTUREACCESS_TARGET)
|
||||||
{
|
{
|
||||||
std::cout << "ERROR FATAL: La textura per al render ha de tindre SDL_TEXTUREACCESS_TARGET definit." << std::endl;
|
std::cout << "ERROR FATAL: La textura per al render ha de tindre SDL_TEXTUREACCESS_TARGET definit." << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_RendererInfo rendererInfo;
|
const char * renderer_name = SDL_GetRendererName(renderer);
|
||||||
SDL_GetRendererInfo(renderer, &rendererInfo);
|
printf("rendererInfo.name: %s\n", renderer_name);
|
||||||
|
|
||||||
if(!strncmp(rendererInfo.name, "opengl", 6)) {
|
if(!strncmp(renderer_name, "opengl", 6)) {
|
||||||
//std::cout << "Es OpenGL!" << std::endl;
|
//std::cout << "Es OpenGL!" << std::endl;
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
if (!initGLExtensions()) {
|
if (!initGLExtensions()) {
|
||||||
@@ -184,7 +186,14 @@ namespace shader
|
|||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
if (usingOpenGL) {
|
if (usingOpenGL) {
|
||||||
SDL_GL_BindTexture(backBuffer, NULL, NULL);
|
SDL_PropertiesID props = SDL_GetTextureProperties(backBuffer);
|
||||||
|
GLuint texture_number = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER, -1);
|
||||||
|
//printf("texture number: %i\n", texture_number);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texture_number);
|
||||||
|
//if (SDL_GL_BindTexture(backBuffer, NULL, NULL)!=0) {
|
||||||
|
// printf("Error en SDL_GL_BindTexture: %s\n", SDL_GetError());
|
||||||
|
// exit(1);
|
||||||
|
//}
|
||||||
if(programId != 0) {
|
if(programId != 0) {
|
||||||
glGetIntegerv(GL_CURRENT_PROGRAM,&oldProgramId);
|
glGetIntegerv(GL_CURRENT_PROGRAM,&oldProgramId);
|
||||||
glUseProgram(programId);
|
glUseProgram(programId);
|
||||||
@@ -194,8 +203,8 @@ namespace shader
|
|||||||
GLfloat minu, maxu, minv, maxv;
|
GLfloat minu, maxu, minv, maxv;
|
||||||
|
|
||||||
// Coordenadas de la ventana donde pintar.
|
// Coordenadas de la ventana donde pintar.
|
||||||
minx = 0.0f;
|
minx = 0.0f; //-0.5f;
|
||||||
miny = 0.0f;
|
miny = 0.0f; // -0.5f;
|
||||||
maxx = tex_size.x;
|
maxx = tex_size.x;
|
||||||
maxy = tex_size.y;
|
maxy = tex_size.y;
|
||||||
|
|
||||||
@@ -216,13 +225,14 @@ namespace shader
|
|||||||
glTexCoord2f(maxu, maxv);
|
glTexCoord2f(maxu, maxv);
|
||||||
glVertex2f(maxx, maxy);
|
glVertex2f(maxx, maxy);
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
||||||
SDL_GL_SwapWindow(win);
|
SDL_GL_SwapWindow(win);
|
||||||
|
|
||||||
if(programId != 0) {
|
if(programId != 0) {
|
||||||
glUseProgram(oldProgramId);
|
glUseProgram(oldProgramId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SDL_RenderCopy(renderer, backBuffer, NULL, NULL);
|
SDL_RenderTexture(renderer, backBuffer, NULL, NULL);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
|
|
||||||
// TIPS:
|
// TIPS:
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
|
|||||||
21
main.cpp
21
main.cpp
@@ -3,18 +3,26 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <streambuf>
|
#include <streambuf>
|
||||||
#include "jshader.h"
|
#include "jshader.h"
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
|
|
||||||
#define WIDTH 384
|
#define WIDTH 384
|
||||||
#define HEIGHT 240
|
#define HEIGHT 240
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
SDL_Init(SDL_INIT_EVERYTHING);
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
SDL_Window *win = SDL_CreateWindow("Shaders i tal", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH*3, HEIGHT*3, 0);
|
SDL_Window *win = SDL_CreateWindow("Shaders i tal", WIDTH*3, HEIGHT*3, SDL_WINDOW_OPENGL);
|
||||||
|
if (!win) { printf("ERROR al crear la finestra: %s\n", SDL_GetError()); }
|
||||||
|
|
||||||
|
const int num_drivers = SDL_GetNumRenderDrivers();
|
||||||
|
printf("VIDEO DRIVERS AVAILABLE:\n");
|
||||||
|
for (int i=0; i<num_drivers;++i) printf("%i: %s\n", i, SDL_GetVideoDriver(i));
|
||||||
|
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
|
||||||
SDL_Renderer *renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
SDL_Renderer *renderer = SDL_CreateRenderer(win, NULL); //-1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||||
|
if (!renderer) { printf("ERROR al crear el renderer: %s\n", SDL_GetError()); }
|
||||||
SDL_Texture *texTarget = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, WIDTH, HEIGHT);
|
SDL_Texture *texTarget = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, WIDTH, HEIGHT);
|
||||||
|
if (!win) { printf("ERROR al crear la textura target: %s\n", SDL_GetError()); }
|
||||||
|
|
||||||
std::ifstream f("crtpi.glsl");
|
std::ifstream f("crtpi.glsl");
|
||||||
std::string source((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
|
std::string source((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
|
||||||
@@ -23,6 +31,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
// Carreguem una imatge pa ficar algo
|
// Carreguem una imatge pa ficar algo
|
||||||
SDL_Texture *bmpTex = SDL_CreateTextureFromSurface(renderer, SDL_LoadBMP("pang.bmp"));
|
SDL_Texture *bmpTex = SDL_CreateTextureFromSurface(renderer, SDL_LoadBMP("pang.bmp"));
|
||||||
|
if (!win) { printf("ERROR al crear la textura sprite: %s\n", SDL_GetError()); }
|
||||||
|
|
||||||
bool should_exit = false;
|
bool should_exit = false;
|
||||||
|
|
||||||
@@ -30,11 +39,11 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
while ( SDL_PollEvent(&e) ) {
|
while ( SDL_PollEvent(&e) ) {
|
||||||
if ( e.type == SDL_QUIT || ( e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE ) ) { should_exit = true; }
|
if ( e.type == SDL_EVENT_QUIT || ( e.type == SDL_EVENT_KEY_DOWN && e.key.scancode == SDLK_ESCAPE ) ) { should_exit = true; }
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SetRenderTarget(renderer, texTarget);
|
SDL_SetRenderTarget(renderer, texTarget);
|
||||||
SDL_RenderCopy(renderer, bmpTex, NULL, NULL);
|
SDL_RenderTexture(renderer, bmpTex, NULL, NULL);
|
||||||
|
|
||||||
shader::render();
|
shader::render();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user