From 7e5318c50191b776427747e8a603d4ddcc6d1a64 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Fri, 28 Jun 2024 11:12:50 +0200 Subject: [PATCH] =?UTF-8?q?-=20S'ha=20llevat=20la=20carpeta=20".vscode"=20?= =?UTF-8?q?i=20la=20merdeta=20que=20estava=20dins=20-=20Afegit=20m=C3=B2du?= =?UTF-8?q?l=20jshader.=20-=20Afegit=20shader=20al=20arxiu=20de=20dades=20?= =?UTF-8?q?-=20Actualitzat=20makefile=20per=20a=20la=20ocasi=C3=B3=20-=20A?= =?UTF-8?q?fegit=20lo=20de=20afegir=20car=C3=A0cter=200=20al=20final=20si?= =?UTF-8?q?=20es=20vol=20en=20jfile=20-=20Llevat=20el=20flag=20d'executabl?= =?UTF-8?q?e=20que=20tenien=20tots=20els=20arxius,=20jo=20que=20se=20perqu?= =?UTF-8?q?=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .vscode/configurationCache.log | 1 - .vscode/dryrun.log | 5 - .vscode/settings.json | 10 -- .vscode/targets.log | 257 --------------------------------- bola.cpp | 0 bola.h | 0 data.jrf | Bin 820229 -> 827647 bytes engendro.cpp | 0 engendro.h | 0 gcwmake | 0 info.h | 0 jdraw8.cpp | 22 ++- jdraw8.h | 0 jfile.cpp | 7 +- jfile.h | 2 +- jgame.cpp | 0 jgame.h | 0 jinput.cpp | 0 jinput.h | 0 jshader.cpp | 229 +++++++++++++++++++++++++++++ jshader.h | 44 ++++++ jsound.cpp | 0 jsound.h | 0 main.cpp | 0 makefile | 8 +- mapa.cpp | 0 mapa.h | 0 marcador.cpp | 0 marcador.h | 0 modulegame.cpp | 0 modulegame.h | 0 modulesequence.cpp | 0 modulesequence.h | 0 momia.cpp | 0 momia.h | 0 prota.cpp | 0 prota.h | 0 sprite.cpp | 0 sprite.h | 0 40 files changed, 300 insertions(+), 286 deletions(-) delete mode 100644 .vscode/configurationCache.log delete mode 100644 .vscode/dryrun.log delete mode 100644 .vscode/settings.json delete mode 100644 .vscode/targets.log mode change 100755 => 100644 bola.cpp mode change 100755 => 100644 bola.h mode change 100755 => 100644 data.jrf mode change 100755 => 100644 engendro.cpp mode change 100755 => 100644 engendro.h mode change 100755 => 100644 gcwmake mode change 100755 => 100644 info.h mode change 100755 => 100644 jdraw8.cpp mode change 100755 => 100644 jdraw8.h mode change 100755 => 100644 jfile.cpp mode change 100755 => 100644 jfile.h mode change 100755 => 100644 jgame.cpp mode change 100755 => 100644 jgame.h mode change 100755 => 100644 jinput.cpp mode change 100755 => 100644 jinput.h create mode 100644 jshader.cpp create mode 100644 jshader.h mode change 100755 => 100644 jsound.cpp mode change 100755 => 100644 jsound.h mode change 100755 => 100644 main.cpp mode change 100755 => 100644 makefile mode change 100755 => 100644 mapa.cpp mode change 100755 => 100644 mapa.h mode change 100755 => 100644 marcador.cpp mode change 100755 => 100644 marcador.h mode change 100755 => 100644 modulegame.cpp mode change 100755 => 100644 modulegame.h mode change 100755 => 100644 modulesequence.cpp mode change 100755 => 100644 modulesequence.h mode change 100755 => 100644 momia.cpp mode change 100755 => 100644 momia.h mode change 100755 => 100644 prota.cpp mode change 100755 => 100644 prota.h mode change 100755 => 100644 sprite.cpp mode change 100755 => 100644 sprite.h diff --git a/.gitignore b/.gitignore index 77b158b..735959a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ trick.ini project.xcworkspace/ xcuserdata/ *.opk +.vscode/* \ No newline at end of file diff --git a/.vscode/configurationCache.log b/.vscode/configurationCache.log deleted file mode 100644 index e014552..0000000 --- a/.vscode/configurationCache.log +++ /dev/null @@ -1 +0,0 @@ -{"buildTargets":["all","clean","debug"],"launchTargets":["/Users/raimonzamora/dev/proj/aee>aee()"],"customConfigurationProvider":{"workspaceBrowse":{"browsePath":["/Users/raimonzamora/dev/proj/aee"],"compilerArgs":["-lSDL2","-lSDL2_mixer","-o","aee","-lSDL2","-lSDL2_mixer","-o","aee","-lSDL2","-lSDL2_mixer","-o","aee","-g","-lSDL2","-lSDL2_mixer","-o","aee"],"compilerPath":"/usr/bin/g++","standard":"c++11","windowsSdkVersion":""},"fileIndex":[["/Users/raimonzamora/dev/proj/aee/*.cpp",{"uri":{"$mid":1,"fsPath":"/Users/raimonzamora/dev/proj/aee/*.cpp","path":"/Users/raimonzamora/dev/proj/aee/*.cpp","scheme":"file"},"configuration":{"defines":[],"standard":"c++11","includePath":[],"forcedInclude":[],"intelliSenseMode":"gcc-x64","compilerPath":"/usr/bin/g++","compilerArgs":["-g","-lSDL2","-lSDL2_mixer","-o","aee"],"windowsSdkVersion":""}}]]}} \ No newline at end of file diff --git a/.vscode/dryrun.log b/.vscode/dryrun.log deleted file mode 100644 index b3ed2b0..0000000 --- a/.vscode/dryrun.log +++ /dev/null @@ -1,5 +0,0 @@ -make debug --dry-run --keep-going --print-directory -make: Entering directory `/Users/raimonzamora/dev/proj/aee' -g++ *.cpp -g -std=c++11 -lSDL2 -lSDL2_mixer -o aee -make: Leaving directory `/Users/raimonzamora/dev/proj/aee' - diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 760a59c..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "makefile.extensionOutputFolder": "./.vscode", - "makefile.launchConfigurations": [ - { - "cwd": "/Users/raimonzamora/dev/proj/aee", - "binaryPath": "/Users/raimonzamora/dev/proj/aee/aee", - "binaryArgs": [] - } - ] -} \ No newline at end of file diff --git a/.vscode/targets.log b/.vscode/targets.log deleted file mode 100644 index 6d5ff31..0000000 --- a/.vscode/targets.log +++ /dev/null @@ -1,257 +0,0 @@ -make all --print-data-base --no-builtin-variables --no-builtin-rules --question -# GNU Make 3.81 -# Copyright (C) 2006 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. -# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -# This program built for i386-apple-darwin11.3.0 - - -# Make data base, printed on Wed Sep 1 20:00:35 2021 - - -# Variables - -# automatic -/dev/null || echo /Developer)/Makefiles -# environment -VSCODE_CLI = 1 -# environment -VSCODE_CODE_CACHE_PATH = /Users/raimonzamora/Library/Application Support/Code/CachedData/3866c3553be8b268c8a7f8c0482c0c0177aa8bfa -# environment -LOGNAME = raimonzamora -# environment -APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL = true -# environment -VSCODE_HANDLES_UNCAUGHT_ERRORS = true -# automatic -^D = $(patsubst %/,%,$(dir $^)) -# environment -XPC_FLAGS = 0x0 -# default -MAKE = $(MAKE_COMMAND) -# default -MAKECMDGOALS := all -# environment -SHLVL = 3 -# default -MAKE_VERSION := 3.81 -# environment -USER = raimonzamora -# makefile -.DEFAULT_GOAL := all -# environment -TERM_SESSION_ID = 765A9C16-03F5-46AC-A0BE-B297B910335E -# automatic -%D = $(patsubst %/,%,$(dir $%)) -# default -MAKE_COMMAND := /Library/Developer/CommandLineTools/usr/bin/make -# environment -TERM_PROGRAM = Apple_Terminal -# default -.VARIABLES := -# environment -TMPDIR = /var/folders/jb/tqpp4m1j50d3gjsyry8hwypm0000gn/T/ -# automatic -*F = $(notdir $*) -# environment -VSCODE_IPC_HOOK = /Users/raimonzamora/Library/Application Support/Code/1.59.1-main.sock -# makefile -MAKEFLAGS = Rrqp -# environment -MFLAGS = -Rrqp -# automatic -*D = $(patsubst %/,%,$(dir $*)) -# environment -TERM_PROGRAM_VERSION = 440 -# environment -XPC_SERVICE_NAME = 0 -# automatic -+D = $(patsubst %/,%,$(dir $+)) -# automatic -+F = $(notdir $+) -# environment -__CF_USER_TEXT_ENCODING = 0x1F5:0x0:0x8 -# environment -COMMAND_MODE = unix2003 -# default -MAKEFILES := -# environment -VSCODE_BROWSER_CODE_LOADING = bypassHeatCheck -# automatic -{W_ZJAZ7)N!qTV)7&&ky(Xy_J8i>0go}N4u07v* zcjqK-H=PDds}MqLs49p_)3gFY8yn$^1$;nbh)tFF1d}E-3BF8#VA3R{2_Xdhp69(g zpPjHYQd8&N=Y9VCp6B_!&wGC6TK2zhWDgc{XO+7ZMY-?AgG&3MtDiLb+TVENz>j}+ zQ+B-3h9O2pPAq9|V@-FQmM9pa>KM9JFWvDWl-VR%BbDrwshb-Q9zTX?|snigyeZ(SFj?$ljjSNV^*#bq(4 zTe_o}qR?D3jk1_G%DUz1LW6O7;;!ozvDRYoS-8OJiqZ{V7qd20Yo1|SQ$jajz!4j| zlB`a%TEf)eS-2M{sf)I!yC+nYagg8<3>DoqY8HI* zY~gR(&SkNwo2G!hF6ie9%dSWmDLo~|GRHFo@rXE@Idg^NG*Q#)y4Zxb_&jl99I-a^ zvL_shBbgF;51}J&mxC@CM_d7QVqJ48gs#vn4Zv76;kz~zRdvm4I*{Hp;D~G5o0Nu% zy=fs`P=Sc?H(a-DVcJ#=VPZcrVT-!vmDjr*OozJ=86*!#SiX$I}dp zENT|gV~Zvl4mH9hxv)H6$`^ABh4~p;LVGviPTe+uuU@U9P~o?<<}c2yUYNv?Ok#)nYwnlCtL)N z*iGZIZnl6lBhD!MCL%^N*ELbL9S6`5?=;=8@Hj@7lAd2IESF@ixPs3um!bzLF`Ek$ zDasmhfi0XC5Di(TsCHH5@6g2$v<6BFbqhw@=^dQWkay&M-9YaXu~QclIRhroK~iKy zSU0J+Jz^Epwl7muz%`Ox*Zd87X4w`{CEBPrv0)uYh>#e`qF}1zss&v~kpjr+<)!nv z((=-bpcBM)zzh_sTL#Tr#QBlH>O~H$^Y=R6Kv?>(FI#}k4ZF!oBEQ`EsIuteBC#LdjaD>@(S|dS&iQ*YQ zw^W!}A~W;n&MmCY=B7*MmQV_o=h&tU#;_2LM(t%$Ux4z7fr`*zNfZ(X|tvJdsJd{?| z!wpBPp^6(C@e*aY1NB8QSd+ z(@fSjxtBH>xZmM|!36?F;tC#eNzJi6or;(xU@=50ITMFEO-F;`sEkOAP4b8C$b5-a zq@{rsCG$9tw7Zx;h`PLLxG%vi) z!i5QO9w(E&HEr8YrDs*zkFA9|*>&bz8EMBFuShmIvqn+q(#hj09tJ8LZ_B2UGQqf)DTjn| zKmQrYuAa^pF}an9o`cvsYZpgijJc9Td^kK#X&CoSKO9_X?0463NL-e~73SH7i5VOB z4GpvCnt?%%r%1k7W5UEF*Mz8zZfRO5Rh;V(&@i$}*Vb4+mpwe9v1(K#KqBKntmB&B z@tgeO@Wjx`V1f>sCU`s=1eQrnlC10#$9)3od0%P^s>4si!KYUAtQF}W4mM!P@3d_k z!XW{@T@J;xWt@RyV-_IqQ30%W(cxEGqcK{cl;76AN^AJzx1okJsd4!e z(SDePjtQS;bOxrIL}d@f88Jxpcot-bk&Zd9JN&4t5InPkr*Cn-0pIC>M2H+INGf1j z_K8o>IA4Uf8LCr|*(`2S)3%9A9^0Hi*YX}Y)X5s`)lYgmVN!*5N#w19v4x$`7&$dW z1nBR6mIgyEITYxrH>Sx|C_sVO4m(c|Ld{7rOdW{O?wW!RK(4o42j2|omda9V-X z?x_JBo#aRqTVXPNxwR`dDPrmX?g|AQmQ0u#pdfRDi9QtUv=o0Q(B13_riw@u;gPo# zrXMb`A^ZZSY<`!&V<5I70409XW!f&)vSS_e=u=d&G=c>24-4=Q${`#|8S!y|ZPNRF z4xIWUdpg0%a&W!#%E^>dTkDw_LJltCW)~Yj_>S5AsB_Dt=0g7mrUILEfYKB4iSBT8 za0L<#dlTm!{V_tP&Uhj=b0<4Ngu_}dj{=$a^iG+BHlG3|(7O1(C%V1E2z_*)aJ;}t z_GqsV#{5(!9ls;&3?zt$V2$qE;w0D|0qjPWAw+z{2Pp2?JciBO3BG)Z$*+FUKQu)p z5|LWw=3pvKqBO&Ep5W(~VuT`5Ill>IB}C+tl-hoNX~qmbp6I!j@eDjd@%U$BucMim zg0y#SM=UHI7Y^q3VBqb7CL2b#cW{1JbisMaenc^%54hZR#IV-`R=ymIxQV#Gj^f|O*JGQpe%KuN_{+4>RJ$$eF`tfhSw0(NJ@Ywc^Kfa~D{9NNy`zzm4>&M!M z<__LJbpzkDo@qb4amU|owqO5XV11=M@a2KG6VElOH?a59H@^9oJNut&+|&N)+v@f4 zXDc7{;orV?<%9jtUu*xNs2Py@0m$v)foN7NfIq>e#4`Kfu`il2jd-T@>&+lu0_tk-e zcl!tNMeyf-p(wav(a+J;R$ckiARhcxD2i#<>{QLDLPk*r-cywK?^6_fC)_YnHPbcm z@WX#9%A;RU6ocMOhoUF$?^9kGQWU)7*39tX`*VHDv4`*w-wNpA!~6WF`;_b3k@+z) ze|A*iO?Ndgl6veaaYg(2S*tf(F_9^4vkG4AUVd8 zzVh15{mOR|furO6@CAGJxBh-*eIm3ZwJNXm-Jv{xZC?nvt;md^U*5<^7`{ zUi{vj%B5S8`Qt44EB%0S{VqkJ?_%j2PL{oJ<$&_9n~}~*k{o^P0kx{A0IIHAO=3PGRW8 zAesQU?+Bp#Z<9C#7i zGZn2QahRT6H1Z9!;MAS-q=PFGtM;VD7TWwlpK(cyr|8k3$=+D}`R9BqwI}%ZHk!-o zx7&;3n=h<%_#kJ|)B2Pk?3JH68yy+cPmaF4sy$(61O;*8!8x8l=M8j z%i*MlVZ<*6RP4dGcX1ArT~&1|?QGva4w*(^f|cRxfrz4C>v^1M1wu2iNLY~=L0dPE z&+PRIs?&Dtj`LV;ub@jw=gs$0Jic3j>F|U)4VV#s#t);-0*HZ`IVB`Zzw8?&9vnMV iM)k~cxt!nOF*XXs!s2Crr_y4T>l1LyS3x!Pto;X{a@d#v diff --git a/engendro.cpp b/engendro.cpp old mode 100755 new mode 100644 diff --git a/engendro.h b/engendro.h old mode 100755 new mode 100644 diff --git a/gcwmake b/gcwmake old mode 100755 new mode 100644 diff --git a/info.h b/info.h old mode 100755 new mode 100644 diff --git a/jdraw8.cpp b/jdraw8.cpp old mode 100755 new mode 100644 index 6f8d69e..2aaf2d2 --- a/jdraw8.cpp +++ b/jdraw8.cpp @@ -2,13 +2,14 @@ #include "jfile.h" #include #include "gif.h" +#include "jshader.h" #ifdef GCWZERO #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 #else -#define SCREEN_WIDTH 640 -#define SCREEN_HEIGHT 480 +#define SCREEN_WIDTH 960 +#define SCREEN_HEIGHT 720 #endif JD8_Surface screen = NULL; @@ -25,6 +26,7 @@ char *fps = (char *)malloc(10); SDL_Window* sdlWindow = NULL; SDL_Renderer* sdlRenderer = NULL; SDL_Texture* sdlTexture = NULL; +SDL_Texture* backBuffer = NULL; void JD8_Init(const char *title) { screen = (JD8_Surface)calloc( 1, 64000 ); @@ -32,10 +34,18 @@ void JD8_Init(const char *title) { pixel_data = (Uint32*)calloc(1, 320 * 200 * 4); // 1048576 ); sdlWindow = SDL_CreateWindow( title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); - sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, 0); + SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest"); + sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE); sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING, 320, 200); + backBuffer = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 320, 200); + + int filesize = 0; + char *buffer = JF_GetBufferFromResource("crtpi.glsl", filesize, true); + + shader::init(sdlWindow, backBuffer, buffer); + free(buffer); } void JD8_Quit() { @@ -180,8 +190,10 @@ void JD8_Flip() { } } SDL_UpdateTexture(sdlTexture, NULL, pixel_data, 320 * sizeof(Uint32)); - SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, &rect); - SDL_RenderPresent(sdlRenderer); + SDL_SetRenderTarget(sdlRenderer, backBuffer); + SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL); + shader::render(); + //SDL_RenderPresent(sdlRenderer); } void JD8_FreeSurface(JD8_Surface surface) { diff --git a/jdraw8.h b/jdraw8.h old mode 100755 new mode 100644 diff --git a/jfile.cpp b/jfile.cpp old mode 100755 new mode 100644 index 5e409dc..11fd610 --- a/jfile.cpp +++ b/jfile.cpp @@ -56,7 +56,7 @@ void JF_GetDataFile() { fd.close(); } -char *JF_GetBufferFromResource(const char *resourcename, int& filesize) { +char *JF_GetBufferFromResource(const char *resourcename, int& filesize, const bool addZero) { if( data_file == NULL ) { JF_GetDataFile(); @@ -85,11 +85,12 @@ char *JF_GetBufferFromResource(const char *resourcename, int& filesize) { fd.seekg( data_file->index.file_info[count].offset ); - char* buffer = (char*)malloc( filesize ); + char* buffer = (char*)malloc( filesize + (addZero ? 1 : 0) ); fd.read( buffer, filesize ); - fd.close(); + if (addZero) buffer[filesize] = 0; + return buffer; } diff --git a/jfile.h b/jfile.h old mode 100755 new mode 100644 index 57155bc..55c7e0d --- a/jfile.h +++ b/jfile.h @@ -2,6 +2,6 @@ void JF_SetResourceFile(const char *p_resourceFileName); -char *JF_GetBufferFromResource(const char *resourcename, int& filesize); +char *JF_GetBufferFromResource(const char *resourcename, int& filesize, const bool addZero=false); void JF_Quit(); \ No newline at end of file diff --git a/jgame.cpp b/jgame.cpp old mode 100755 new mode 100644 diff --git a/jgame.h b/jgame.h old mode 100755 new mode 100644 diff --git a/jinput.cpp b/jinput.cpp old mode 100755 new mode 100644 diff --git a/jinput.h b/jinput.h old mode 100755 new mode 100644 diff --git a/jshader.cpp b/jshader.cpp new file mode 100644 index 0000000..06ea620 --- /dev/null +++ b/jshader.cpp @@ -0,0 +1,229 @@ +#include "jshader.h" + +#include + +#ifdef __APPLE__ +#include "CoreFoundation/CoreFoundation.h" +#include + +#if ESSENTIAL_GL_PRACTICES_SUPPORT_GL3 +#include +#else +#include +#endif //!ESSENTIAL_GL_PRACTICES_SUPPORT_GL3 +#else +#include +#include +#endif + +namespace shader +{ + SDL_Window *win = nullptr; + SDL_Renderer *renderer = nullptr; + GLuint programId = 0; + SDL_Texture* backBuffer = nullptr; + SDL_Point win_size = {640, 480}; + SDL_Point tex_size = {320, 240}; + bool usingOpenGL; + + #ifndef __APPLE__ + + // I'm avoiding the use of GLEW or some extensions handler, but that + // doesn't mean you should... + PFNGLCREATESHADERPROC glCreateShader; + PFNGLSHADERSOURCEPROC glShaderSource; + PFNGLCOMPILESHADERPROC glCompileShader; + PFNGLGETSHADERIVPROC glGetShaderiv; + PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; + PFNGLDELETESHADERPROC glDeleteShader; + PFNGLATTACHSHADERPROC glAttachShader; + PFNGLCREATEPROGRAMPROC glCreateProgram; + PFNGLLINKPROGRAMPROC glLinkProgram; + PFNGLVALIDATEPROGRAMPROC glValidateProgram; + PFNGLGETPROGRAMIVPROC glGetProgramiv; + PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; + PFNGLUSEPROGRAMPROC glUseProgram; + + bool initGLExtensions() { + glCreateShader = (PFNGLCREATESHADERPROC)SDL_GL_GetProcAddress("glCreateShader"); + glShaderSource = (PFNGLSHADERSOURCEPROC)SDL_GL_GetProcAddress("glShaderSource"); + glCompileShader = (PFNGLCOMPILESHADERPROC)SDL_GL_GetProcAddress("glCompileShader"); + glGetShaderiv = (PFNGLGETSHADERIVPROC)SDL_GL_GetProcAddress("glGetShaderiv"); + glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)SDL_GL_GetProcAddress("glGetShaderInfoLog"); + glDeleteShader = (PFNGLDELETESHADERPROC)SDL_GL_GetProcAddress("glDeleteShader"); + glAttachShader = (PFNGLATTACHSHADERPROC)SDL_GL_GetProcAddress("glAttachShader"); + glCreateProgram = (PFNGLCREATEPROGRAMPROC)SDL_GL_GetProcAddress("glCreateProgram"); + glLinkProgram = (PFNGLLINKPROGRAMPROC)SDL_GL_GetProcAddress("glLinkProgram"); + glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)SDL_GL_GetProcAddress("glValidateProgram"); + glGetProgramiv = (PFNGLGETPROGRAMIVPROC)SDL_GL_GetProcAddress("glGetProgramiv"); + glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)SDL_GL_GetProcAddress("glGetProgramInfoLog"); + glUseProgram = (PFNGLUSEPROGRAMPROC)SDL_GL_GetProcAddress("glUseProgram"); + + return glCreateShader && glShaderSource && glCompileShader && glGetShaderiv && + glGetShaderInfoLog && glDeleteShader && glAttachShader && glCreateProgram && + glLinkProgram && glValidateProgram && glGetProgramiv && glGetProgramInfoLog && + glUseProgram; + } + + #endif + + GLuint compileShader(const char* source, GLuint shaderType) { + // Create ID for shader + GLuint result = glCreateShader(shaderType); + // Add define depending on shader type + const char *sources[2] = { shaderType==GL_VERTEX_SHADER?"#define VERTEX\n":"#define FRAGMENT\n", source }; + // Define shader text + glShaderSource(result, 2, sources, NULL); + // Compile shader + glCompileShader(result); + + //Check vertex shader for errors + GLint shaderCompiled = GL_FALSE; + glGetShaderiv( result, GL_COMPILE_STATUS, &shaderCompiled ); + if( shaderCompiled != GL_TRUE ) { + std::cout << "Error en la compilación: " << result << "!" << std::endl; + GLint logLength; + glGetShaderiv(result, GL_INFO_LOG_LENGTH, &logLength); + if (logLength > 0) + { + GLchar *log = (GLchar*)malloc(logLength); + glGetShaderInfoLog(result, logLength, &logLength, log); + std::cout << "Shader compile log:" << log << std::endl; + free(log); + } + glDeleteShader(result); + result = 0; +// } else { +// std::cout << "Shader compilado correctamente. Id = " << result << std::endl; + } + return result; + } + + GLuint compileProgram(const char* vertexShaderSource, const char* fragmentShaderSource) { + GLuint programId = 0; + GLuint vtxShaderId, fragShaderId; + + programId = glCreateProgram(); + + vtxShaderId = compileShader(vertexShaderSource, GL_VERTEX_SHADER); + fragShaderId = compileShader(fragmentShaderSource?fragmentShaderSource:vertexShaderSource, GL_FRAGMENT_SHADER); + + if(vtxShaderId && fragShaderId) { + // Associate shader with program + glAttachShader(programId, vtxShaderId); + glAttachShader(programId, fragShaderId); + glLinkProgram(programId); + glValidateProgram(programId); + + // Check the status of the compile/link + GLint logLen; + glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &logLen); + if(logLen > 0) { + char* log = (char*) malloc(logLen * sizeof(char)); + // Show any errors as appropriate + glGetProgramInfoLog(programId, logLen, &logLen, log); + std::cout << "Prog Info Log: " << std::endl << log << std::endl; + free(log); + } + } + if(vtxShaderId) { + glDeleteShader(vtxShaderId); + } + if(fragShaderId) { + glDeleteShader(fragShaderId); + } + return programId; + } + + const bool init(SDL_Window* win, SDL_Texture* backBuffer, const char* vertexShader, const char* fragmentShader) + { + shader::win = win; + shader::renderer = SDL_GetRenderer(win); + shader::backBuffer = backBuffer; + SDL_GetWindowSize(win, &win_size.x, &win_size.y); + int access; + SDL_QueryTexture(backBuffer, NULL, &access, &tex_size.x, &tex_size.y); + if (access != SDL_TEXTUREACCESS_TARGET) + { + std::cout << "ERROR FATAL: La textura per al render ha de tindre SDL_TEXTUREACCESS_TARGET definit." << std::endl; + exit(1); + } + + SDL_RendererInfo rendererInfo; + SDL_GetRendererInfo(renderer, &rendererInfo); + + if(!strncmp(rendererInfo.name, "opengl", 6)) { + //std::cout << "Es OpenGL!" << std::endl; + #ifndef __APPLE__ + if (!initGLExtensions()) { + std::cout << "WARNING: No s'han pogut inicialitzar les extensions d'OpenGL!" << std::endl; + usingOpenGL = false; + return false; + } + #endif + // Compilar el shader y dejarlo listo para usar. + programId = compileProgram(vertexShader, fragmentShader); + //std::cout << "programId = " << programId << std::endl; + } else { + std::cout << "WARNING: El driver del renderer no es OpenGL." << std::endl; + usingOpenGL = false; + return false; + } + usingOpenGL = true; + return true; + } + + void render() + { + GLint oldProgramId; + // Guarrada para obtener el textureid (en driverdata->texture) + //Detach the texture + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + + SDL_SetRenderTarget(renderer, NULL); + SDL_RenderClear(renderer); + + if (usingOpenGL) { + SDL_GL_BindTexture(backBuffer, NULL, NULL); + if(programId != 0) { + glGetIntegerv(GL_CURRENT_PROGRAM,&oldProgramId); + glUseProgram(programId); + } + + GLfloat minx, miny, maxx, maxy; + GLfloat minu, maxu, minv, maxv; + + // Coordenadas de la ventana donde pintar. + minx = 0.0f; + miny = 0.0f; + maxx = tex_size.x; + maxy = tex_size.y; + + minu = 0.0f; + maxu = 1.0f; + minv = 0.0f; + maxv = 1.0f; + + glViewport(0, 0, win_size.x, win_size.y); + + glBegin(GL_TRIANGLE_STRIP); + glTexCoord2f(minu, minv); + glVertex2f(minx, miny); + glTexCoord2f(maxu, minv); + glVertex2f(maxx, miny); + glTexCoord2f(minu, maxv); + glVertex2f(minx, maxy); + glTexCoord2f(maxu, maxv); + glVertex2f(maxx, maxy); + glEnd(); + SDL_GL_SwapWindow(win); + + if(programId != 0) { + glUseProgram(oldProgramId); + } + } else { + SDL_RenderCopy(renderer, backBuffer, NULL, NULL); + SDL_RenderPresent(renderer); + } + } +} diff --git a/jshader.h b/jshader.h new file mode 100644 index 0000000..556f796 --- /dev/null +++ b/jshader.h @@ -0,0 +1,44 @@ +#pragma once + +#include + +// TIPS: +// ======================================================================= +// Abans de crear el renderer, cridar a la següent funció: +// +// SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); +// +// Aixó li diu que volem un renderer que use especificament opengl. A més, +// al crear el renderer li tenim que dir que el volem que use acceeració +// per hardware, i que soporte render a textura. Per exemple: +// +// SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | +// SDL_RENDERER_TARGETTEXTURE); +// +// Per altra part, al crear la textura tenim que definir que puga ser target +// de renderitzat (SDL_TEXTUREACCESS_TARGET), per exemple: +// +// SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, +// SDL_TEXTUREACCESS_TARGET, 320, 240); +// +// Els shaders li'ls passem com una cadena, som nosaltres els que s'encarreguem +// de carregarlos de disc, amb fopen, ifstream, jfile o el que vullgues. +// Si els tens en un std::string, passa-li-la com "cadena.c_str()". +// +// Poden ser els dos el mateix arxiu, com fa libRetro, jo desde dins ja fique +// els defines necessaris. Si es el mateix arxiu, pots no ficar el quart paràmetre. +// +// Els shaders de libRetro no funcionen directament, hi ha que fer algunes modificacions. +// +// El pintat final de la teua escena l'has de fer com si "backBuffer" fora la pantalla. +// +// Ah! una cosa mes: al compilar, en Linux afegir "-lGL", en Windows afegir "-lopengl32". +// En Mac ni idea + +namespace shader +{ + const bool init(SDL_Window* win, SDL_Texture* backBuffer, + const char* vertexShader, const char* fragmentShader=nullptr); + + void render(); +} diff --git a/jsound.cpp b/jsound.cpp old mode 100755 new mode 100644 diff --git a/jsound.h b/jsound.h old mode 100755 new mode 100644 diff --git a/main.cpp b/main.cpp old mode 100755 new mode 100644 diff --git a/makefile b/makefile old mode 100755 new mode 100644 index 2aa3d81..9248eac --- a/makefile +++ b/makefile @@ -1,9 +1,9 @@ TARGET=aee -all: - g++ *.cpp -std=c++11 -lSDL2 -lSDL2_mixer -o $(TARGET) +linux: + g++ *.cpp -lSDL2 -lSDL2_mixer -lGL -o $(TARGET) -debug: - g++ *.cpp -g -std=c++11 -lSDL2 -lSDL2_mixer -o $(TARGET) +windows: + g++ *.cpp -lmingw32 -lSDL2 -lSDL2_mixer -lopengl32 -mwindows -o $(TARGET) clean: rm -rf ./$(TARGET) diff --git a/mapa.cpp b/mapa.cpp old mode 100755 new mode 100644 diff --git a/mapa.h b/mapa.h old mode 100755 new mode 100644 diff --git a/marcador.cpp b/marcador.cpp old mode 100755 new mode 100644 diff --git a/marcador.h b/marcador.h old mode 100755 new mode 100644 diff --git a/modulegame.cpp b/modulegame.cpp old mode 100755 new mode 100644 diff --git a/modulegame.h b/modulegame.h old mode 100755 new mode 100644 diff --git a/modulesequence.cpp b/modulesequence.cpp old mode 100755 new mode 100644 diff --git a/modulesequence.h b/modulesequence.h old mode 100755 new mode 100644 diff --git a/momia.cpp b/momia.cpp old mode 100755 new mode 100644 diff --git a/momia.h b/momia.h old mode 100755 new mode 100644 diff --git a/prota.cpp b/prota.cpp old mode 100755 new mode 100644 diff --git a/prota.h b/prota.h old mode 100755 new mode 100644 diff --git a/sprite.cpp b/sprite.cpp old mode 100755 new mode 100644 diff --git a/sprite.h b/sprite.h old mode 100755 new mode 100644