DKL9 GitList
Repositories
DKL9 home
voxels
Code
Commits
Branches
Tags
Search
Tree:
3f13a9c
Branches
Tags
master
voxels
src
display.py
Command-line options and tweak textures
dkl9
commited
3f13a9c
at 2025-184 01:10:44
display.py
Blame
History
Raw
from libs import * from OpenGL.GL import shaders import os VS = f""" #version 120 {"\n".join([f"attribute {a};" for a in VERTEX_ATTRS])} {"\n".join([f"varying {a}F;" for a in VERTEX_ATTRS])} {"\n".join([ f"uniform {v[1]} {k};" for (k, v) in UNIFORMS.items() if v[0] == "vert" ])} void main() {{ gl_Position = MVP * vec4(position, 1.0); {"\n".join([f" {a.split()[1]}F = {a.split()[1]};" for a in VERTEX_ATTRS])} }} """ FS = f""" #version 120 {"\n".join([f"varying {a}F;" for a in VERTEX_ATTRS])} {"\n".join([ f"uniform {v[1]} {k};" for (k, v) in UNIFORMS.items() if v[0] == "frag" ])} void main() {{ float ambient = reflsF.x; vec3 lightDir = normalize(lightPos.xyz - positionF); float diffuse = reflsF.y * lightPos.w * dot(normalF, lightDir) / pow(distance(lightPos.xyz, positionF), 2); float specular = reflsF.z * lightPos.w * pow(max(dot( normalize(camPos - positionF), reflect(-lightDir, normalF) ), 0.0), reflsF.w); float j = texcF.z; vec3 c = colF.xyz; {"\n".join([ f"if (abs(j - {i}.0) < 1e-3)" + f"c *= texture2D(tex[{i}], texcF.xy).xyz;" for i in range(TEX_COUNT) ])} gl_FragColor = vec4((ambient + diffuse + specular) * c, colF.w); }} """ def load_texture(i, img_data): (tw, th) = img_data.shape[:2] tex = glGenTextures(1) glActiveTexture(GL_TEXTURE0 + i) glBindTexture(GL_TEXTURE_2D, tex) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tw, th, 0, GL_RGB, GL_UNSIGNED_BYTE, img_data ) def init_display(): pygame.init() pygame.display.set_mode((640, 480), pygame.DOUBLEBUF | pygame.OPENGL | (pygame.FULLSCREEN | pygame.SCALED if conf["maximised"] else pygame.RESIZABLE), vsync=1) pygame.event.set_allowed([ pygame.KEYDOWN, pygame.KEYUP, pygame.MOUSEBUTTONDOWN, pygame.MOUSEBUTTONUP, pygame.MOUSEMOTION, pygame.QUIT, pygame.WINDOWRESIZED, pygame.WINDOWSIZECHANGED ]) pygame.display.set_caption("Voxels") sp = shaders.compileProgram( shaders.compileShader(VS, GL_VERTEX_SHADER), shaders.compileShader(FS, GL_FRAGMENT_SHADER) ) for (k, v) in UNIFORMS.items(): v[2] = glGetUniformLocation(sp, k) glUseProgram(sp) glUniform1iv(UNIFORMS["tex"][2], TEX_COUNT, np.array(range(TEX_COUNT))) glEnable(GL_DEPTH_TEST) glEnable(GL_BLEND) glEnable(GL_CULL_FACE) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glClearColor(0.1, 0.1, 0.1, 1.0)