From f7b6e9a9775b48ceecc5877b1b4ae4d34ae12bc8 Mon Sep 17 00:00:00 2001 From: Quantum Date: Fri, 24 Aug 2018 20:57:48 -0400 Subject: [PATCH] Turned atmosphere and rings into VBOs. --- punyverse/assets/textures/sun_corona.png | Bin 640 -> 0 bytes punyverse/entity.py | 53 +++++------ punyverse/glgeom.py | 112 +++++++++-------------- punyverse/texture.py | 3 +- punyverse/world.json | 4 - 5 files changed, 68 insertions(+), 104 deletions(-) delete mode 100644 punyverse/assets/textures/sun_corona.png diff --git a/punyverse/assets/textures/sun_corona.png b/punyverse/assets/textures/sun_corona.png deleted file mode 100644 index 31fa44541540fa84e63d336390ecb4ce2716beb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PF9P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A0005+NkljWmapMvEwusEC3VMu9;@MAX8Ci#9IYxadE;eINNf@bY?2xbC?4yojrF zzC7>sTC0DoRad<}`$HRA!!~TimarKu*c3KmLs*aIunud(8Z?E*uo|nv%CI6V56ePB zVrf{CSe#junfsz;BETt}z;PTy502spy3vWlID~^Zfc@BqcI?4!?7|LghoYu2(~yej zcn+6GbFe&A8Yz!c7G>^>TLid|JGg}#xQ?s1go`+ja~QxGoJJo`!qFV83y$SbinJGs zv=fSy267y)OL6irMNu3iT}vM0-ytHv8@$2`JjYW!!DBqaLk!{`ZsR5t=?WC-0vxCx zj?)XRsVI!rlSa{MdX}{}k%bi&gf^kPf{_Wxo#V@WX0;o}eE(e{etifAbGf;V-MB aR{IM prob: - distance = rinner + rdelta * random() - avg_theta = (last_theta + theta) / 2 - x0, y0 = rinner * last_x, rinner * last_y - x1, y1 = rinner * x, rinner * y - x2, y2 = distance * cos(avg_theta), distance * sin(avg_theta) - glTexCoord2f(0, 0) - glVertex2f(x0, y0) - glTexCoord2f(0, 1) - glVertex2f(x1, y1) - glTexCoord2f(1, 0) - glVertex2f(x2, y2) - glTexCoord2f(1, 1) - glVertex2f(x2, y2) - last_theta = theta - last_x = x - last_y = y - - -def array_to_ctypes(arr): - return cast(arr.buffer_info()[0], POINTER({ - 'f': c_float, - 'i': c_int, - 'I': c_uint, - }[arr.typecode])) + def draw(self): + with glRestoreClient(GL_CLIENT_VERTEX_ARRAY_BIT): + glBindBuffer(GL_ARRAY_BUFFER, self.vbo) + glEnableClientState(GL_VERTEX_ARRAY) + glEnableClientState(GL_TEXTURE_COORD_ARRAY) + glVertexPointer(3, GL_FLOAT, 12, 0) + glTexCoordPointer(3, GL_FLOAT, 12, 8) + glDrawArrays(GL_TRIANGLE_STRIP, 0, self.vertex_count) + glBindBuffer(GL_ARRAY_BUFFER, 0) class Sphere(object): @@ -214,13 +192,7 @@ class Sphere(object): r * dx2, r * dy2, r * dz, dx2, dy2, dz, phi1 / tau, t] index += 16 - vbo = c_uint() - glGenBuffers(1, byref(vbo)) - self.vbo = vbo.value - glBindBuffer(GL_ARRAY_BUFFER, self.vbo) - buffer = array('f', buffer) - glBufferData(GL_ARRAY_BUFFER, buffer.itemsize * len(buffer), array_to_ctypes(buffer), GL_STATIC_DRAW) - glBindBuffer(GL_ARRAY_BUFFER, 0) + self.vbo = array_to_gl_buffer(buffer) def draw(self): with glRestoreClient(GL_CLIENT_VERTEX_ARRAY_BIT): diff --git a/punyverse/texture.py b/punyverse/texture.py index 80c3902..38166c1 100644 --- a/punyverse/texture.py +++ b/punyverse/texture.py @@ -207,6 +207,7 @@ def load_texture(file, clamp=False): glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR) if clamp: + print('Clamped') glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) @@ -257,5 +258,5 @@ def get_best_texture(info, loader=load_texture, **kwargs): except ValueError: pass else: - return loader(info) + return loader(info, **kwargs) raise ValueError('No texture found') diff --git a/punyverse/world.json b/punyverse/world.json index c68a76e..b3a2b5b 100644 --- a/punyverse/world.json +++ b/punyverse/world.json @@ -23,10 +23,6 @@ "rotation": 2164320, "light_source": true, "atmosphere": { - "corona_texture": "sun_corona.png", - "corona_size": 1500, - "corona_division": 100, - "corona_prob": 0.5, "diffuse_texture": "sun_diffuse.png", "diffuse_size": 300 }