最初コミット

This commit is contained in:
2026-05-02 04:15:55 +09:00
commit 136aefcf9d
6 changed files with 7819 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
.zig-cache
zig-out
zig-pkg

28
build.zig Normal file
View File

@@ -0,0 +1,28 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const exe = b.addExecutable(.{
.name = "OpenGLレンダー",
.root_module = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
}),
});
const zglfw = b.dependency("zglfw", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("zglfw", zglfw.module("root"));
exe.root_module.linkLibrary(zglfw.artifact("glfw"));
exe.root_module.addIncludePath(b.path("./include"));
exe.root_module.addCSourceFile(.{
.file = b.path("src/glad.c" ),
});
b.installArtifact(exe);
}

21
build.zig.zon Normal file
View File

@@ -0,0 +1,21 @@
.{
.name = .opengl_render_zig,
.version = "0.0.0",
.fingerprint = 0x89563c3942605e1,
.minimum_zig_version = "0.16.0",
.dependencies = .{
.zigglgen = .{
.url = "git+https://github.com/castholm/zigglgen.git#7e55ad15655fc4d602ed3bcbe7fb487592063156",
.hash = "zigglgen-0.5.0-ziggltzDLwA0Gk0Pj6QMij1j6Z_jkvGEtGKBM6-YlI_s",
},
.zglfw = .{
.url = "git+https://github.com/zig-gamedev/zglfw.git#51003c105d23db378bb59ce415a387b22f1b0892",
.hash = "zglfw-0.10.0-dev-zgVDNIy4IQDJNRy4jrP1As-SZxfJpuWhU1iJ-wBab_VD",
},
},
.paths = .{
"build.zig",
"build.zig.zon",
"src",
},
}

5131
include/glad/glad.h Normal file

File diff suppressed because it is too large Load Diff

2518
src/glad.c Normal file

File diff suppressed because it is too large Load Diff

118
src/main.zig Normal file
View File

@@ -0,0 +1,118 @@
const std = @import("std");
const glfw = @import("zglfw");
const c = @cImport({
@cInclude("glad/glad.h");
});
const VERTEX_SRC =
\\#version 460 core
\\
\\layout (location = 0) in vec3 aPos;
\\
\\void main() {
\\ gl_Position = vec4(aPos, 1.0);
\\}
;
const FRAG_SRC =
\\#version 460 core
\\
\\out vec4 FragColor;
\\
\\void main() {
\\ FragColor = vec4(1.f, .5f, .2f, 1.f);
\\}
;
fn framebuffer_size_callback(_: *glfw.Window, width: c_int, height: c_int) callconv(.c) void {
c.glViewport(0, 0, width, height);
}
pub fn main() !void {
try glfw.init();
defer glfw.terminate();
glfw.windowHint(.client_api, .opengl_api);
glfw.windowHint(.context_version_major, 4);
glfw.windowHint(.context_version_minor, 6);
glfw.windowHint(.opengl_profile, .opengl_core_profile);
const window = try glfw.Window.create(800, 600,
"OpenGLレンダー", null, null
);
defer window.destroy();
glfw.makeContextCurrent(window);
_ = glfw.setFramebufferSizeCallback(window, framebuffer_size_callback);
_ = c.gladLoadGLLoader(@ptrCast(&glfw.getProcAddress));
const vertexShader = c.glCreateShader(c.GL_VERTEX_SHADER);
c.glShaderSource(vertexShader, 1, @ptrCast(&VERTEX_SRC), null);
c.glCompileShader(vertexShader);
defer c.glDeleteShader(vertexShader);
var success: c_int = 0;
c.glGetShaderiv(vertexShader, c.GL_COMPILE_STATUS, &success);
const fragShader = c.glCreateShader(c.GL_FRAGMENT_SHADER);
c.glShaderSource(fragShader, 1, @ptrCast(&FRAG_SRC), null);
c.glCompileShader(fragShader);
defer c.glDeleteShader(fragShader);
success = 0;
c.glGetShaderiv(fragShader, c.GL_COMPILE_STATUS, &success);
const shaderProgram = c.glCreateProgram();
c.glAttachShader(shaderProgram, vertexShader);
c.glAttachShader(shaderProgram, fragShader);
c.glLinkProgram(shaderProgram);
c.glGetProgramiv(shaderProgram, c.GL_LINK_STATUS, &success);
const vertices = [_]f32{
0.5, 0.5, 0.0,
0.5, -0.5, 0.0,
-0.5, -0.5, 0.0,
-0.5, 0.5, 0.0,
};
const indices = [_]u32{
0, 1, 3,
1, 2, 3,
};
var VBO: u32 = 0;
var VAO: u32 = 0;
var EBO: u32 = 0;
c.glGenVertexArrays(1, &VAO);
defer c.glDeleteVertexArrays(1, &VAO);
c.glGenBuffers(1, &VBO);
defer c.glDeleteBuffers(1, &VBO);
c.glGenBuffers(1, &EBO);
defer c.glDeleteBuffers(1, &EBO);
c.glBindVertexArray(VAO);
c.glBindBuffer(c.GL_ARRAY_BUFFER, VBO);
c.glBufferData(c.GL_ARRAY_BUFFER, vertices.len * @sizeOf(f32), &vertices, c.GL_STATIC_DRAW);
c.glBindBuffer(c.GL_ELEMENT_ARRAY_BUFFER, EBO);
c.glBufferData(c.GL_ELEMENT_ARRAY_BUFFER, indices.len * @sizeOf(u32), &indices, c.GL_STATIC_DRAW);
c.glVertexAttribPointer(0, 3, c.GL_FLOAT, c.GL_FALSE, 3 * @sizeOf(f32), null);
c.glEnableVertexAttribArray(0);
c.glBindBuffer(c.GL_ARRAY_BUFFER, 0);
c.glBindVertexArray(0);
while (!window.shouldClose() and window.getKey(.q) != .press) {
c.glClearColor(0.6, 0.1, 0.6, 1.0);
c.glClear(c.GL_COLOR_BUFFER_BIT);
c.glUseProgram(shaderProgram);
c.glBindVertexArray(VAO);
c.glDrawElements(c.GL_TRIANGLES, 6, c.GL_UNSIGNED_INT, null);
window.swapBuffers();
glfw.pollEvents();
}
}