From bd0ef4cba3d9b4c48b425ea3bfcef7d7b261a2a2 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Sun, 24 Mar 2019 14:09:52 +0000 Subject: [PATCH] Demo multitexturing in zclip, default to GL_MODULATE on multitexture --- GL/draw.c | 4 ++- samples/zclip/main.c | 56 ++++++++++++++++++++++------- samples/zclip/romdisk/lightmap.tga | Bin 0 -> 4140 bytes 3 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 samples/zclip/romdisk/lightmap.tga diff --git a/GL/draw.c b/GL/draw.c index f6b2b3a..5e9a231 100644 --- a/GL/draw.c +++ b/GL/draw.c @@ -1224,7 +1224,9 @@ static void submitVertices(GLenum mode, GLsizei first, GLuint count, GLenum type glDepthFunc(GL_EQUAL); glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + /* This is modulation, we need to switch depending on the texture env mode! */ + glBlendFunc(GL_DST_COLOR, GL_ZERO); /* Send the buffer again to the transparent list */ push(mtHeader, mtStart, target->count, _glTransparentPolyList(), 1); diff --git a/samples/zclip/main.c b/samples/zclip/main.c index b99f3a0..cbb88fd 100644 --- a/samples/zclip/main.c +++ b/samples/zclip/main.c @@ -3,6 +3,7 @@ #include #include "gl.h" +#include "glext.h" #include "glu.h" #include "glkos.h" @@ -23,6 +24,7 @@ typedef struct // Create A Structure TextureImage textures[3]; TextureImage road; +TextureImage lightmap; GLboolean LoadTGA(TextureImage *texture, const char *filename) // Loads A TGA File Into Memory @@ -123,7 +125,11 @@ void LoadGLTextures() { if(!LoadTGA(&road, "/rd/floor.tga")) { fprintf(stderr, "Error loading road texture"); } -}; + + if(!LoadTGA(&lightmap, "/rd/lightmap.tga")) { + fprintf(stderr, "Error loading lightmap texture"); + } +} /* A general OpenGL initialization function. Sets all of the initial parameters. */ @@ -170,40 +176,64 @@ void RenderTower(counter) { float v = 1.0f * (counter + 1); + glActiveTexture(GL_TEXTURE0); + glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textures[counter].texID); + + glActiveTexture(GL_TEXTURE1); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, lightmap.texID); + glBegin(GL_QUADS); - glTexCoord2f(0, 0); + glMultiTexCoord2f(GL_TEXTURE0, 0, 0); + glMultiTexCoord2f(GL_TEXTURE1, 0, 0); glVertex3f(-width, 0,-width); - glTexCoord2f(1, 0); + glMultiTexCoord2f(GL_TEXTURE0, 1, 0); + glMultiTexCoord2f(GL_TEXTURE1, 1, 0); glVertex3f(-width, 0, width); - glTexCoord2f(1, v); + glMultiTexCoord2f(GL_TEXTURE0, 1, v); + glMultiTexCoord2f(GL_TEXTURE1, 1, 1); glVertex3f(-width, height, width); - glTexCoord2f(0, v); + glMultiTexCoord2f(GL_TEXTURE0, 0, v); + glMultiTexCoord2f(GL_TEXTURE1, 0, 1); glVertex3f(-width, height,-width); - glTexCoord2f(0, 0); + glMultiTexCoord2f(GL_TEXTURE0, 0, 0); + glMultiTexCoord2f(GL_TEXTURE1, 0, 0); glVertex3f(-width, 0, width); - glTexCoord2f(1, 0); + glMultiTexCoord2f(GL_TEXTURE0, 1, 0); + glMultiTexCoord2f(GL_TEXTURE1, 1, 0); glVertex3f( width, 0, width); - glTexCoord2f(1, v); + glMultiTexCoord2f(GL_TEXTURE0, 1, v); + glMultiTexCoord2f(GL_TEXTURE1, 1, 1); glVertex3f( width, height, width); - glTexCoord2f(0, v); + glMultiTexCoord2f(GL_TEXTURE0, 0, v); + glMultiTexCoord2f(GL_TEXTURE1, 0, 1); glVertex3f(-width, height, width); - glTexCoord2f(0, 0); + glMultiTexCoord2f(GL_TEXTURE0, 0, 0); + glMultiTexCoord2f(GL_TEXTURE1, 0, 0); glVertex3f(width, 0,width); - glTexCoord2f(1, 0); + glMultiTexCoord2f(GL_TEXTURE0, 1, 0); + glMultiTexCoord2f(GL_TEXTURE1, 1, 0); glVertex3f(width, 0,-width); - glTexCoord2f(1, v); + glMultiTexCoord2f(GL_TEXTURE0, 1, v); + glMultiTexCoord2f(GL_TEXTURE1, 1, 1); glVertex3f(width, height,-width); - glTexCoord2f(0, v); + glMultiTexCoord2f(GL_TEXTURE0, 0, v); + glMultiTexCoord2f(GL_TEXTURE1, 0, 1); glVertex3f(width, height, width); glEnd(); } void RenderFloor() { + glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, road.texID); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, 0); + glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-100, 0, 0); diff --git a/samples/zclip/romdisk/lightmap.tga b/samples/zclip/romdisk/lightmap.tga new file mode 100644 index 0000000000000000000000000000000000000000..af277b64d85c23382866252d12a1a831af4ca9bf GIT binary patch literal 4140 zcmeH~e?*;o9LLYOjZ%!VC`Hq;DC^o)7R`xWb=Q;*?Uu#KqLdp=(N*qfigB_ii>BOB zicKj>v8&wC6kW?5WzjS@O3|DcrP#dh`}6re&(m|-zxThpCok{M^XvP4zn=OhkLNp& zeO&hNC&uIT!0YwG>+wQok4KYFnQOeR_vJZxM(@it>s(XTFy~(DJxPzVroFbLSx@fi zJNA3$*U?VyJvj*Rj4$_nN^m(04Z{uOSB0RLWdDnKa zJ?wSPu3NtH9b|3GS?}Aky{GkEBKDPUVs&$Wchg7KmhWRwM_JR^$MVy4WpD93dse&h zJT^8CadAX57SYksh#}E2F*;wkZ~=xWL~*wJn7;|`q5X`T?P$KG)lcp#W`EPu^pUQ~ zNy$h`PC}AoQW6p`CE`+IA`&eU5)zOQACGuuJoDnkixI@d#cF@!VP?m{a?$=#QI-cC z5`F=VQ~e%bRT@abd%}nNcZ`WmX;PlN@^-nl@w+QlBIjH>FzkV`iqC{kPt5} z2@(Bsb8?WIlZza3?b$ef>l1Nk=y^G1F?uIF7xUS6Jq^fnGT$jK#^huvRN z`)6OZGFy9RWoAJLl$9Y62%wBvQc{A_l2VkGGE12}FD@>Qps=tAg+)auDk@|a;zw71 z+ogd075exK{Om3L^BwZ&aNTkU2CEUQ4x*Y_RaF(q-6~X6R+0)-R0x$QFE2OTF&QWe zIQ`XwF5*!l4s?;Z_|`4la(PH^b)ZXQW1~YuLp|#28=%R#p}roqb+xFgtwpU;hkG?O zsJU0eyoVaj!C;X6tJ$9^F5wt4jE5p24;I?>tLg|4nH zbP~yj9UV#sQ~2${13Yjc-EG=9xBf~8L0qiV?$X~vdW%ET{U-E3d4m3ap&xyHz33Hs z`$#Vy_w=CWF_BarBh=lEP^cT-%xO-CsBk(p@}8 z>9Ml1f|b7rb9rfrEMs}uu(-I0*JSav@LKcFSFiBO#r(no=3Nf%{3O z&hGxZJ3H9f*;Tf;x8Y`M>jOS)ZDH%fmPwv(Zf+{?t(4xvnZp{^*d$hlgPt92}63R?2*Uz5PAx@9i=7vB%uq-GSr4d3*bxuN~N5 zTolfmo9`VDxQ@@CKf}%G$tg}xPjPZ`qIrCLjN>E2(a{l(IJ^7HtPbq14s`i=uD>|! zv-`eyF#qer^#6h{>hc9=4&rix6C&NkL-O14?F)SS0{`DH!2f~t__@5IsPgum+kvv| MyFcA7E&AT`FMLVBBLDyZ literal 0 HcmV?d00001