最初コミット
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.zig-cache
|
||||||
|
zig-out
|
||||||
|
zig-pkg
|
||||||
28
build.zig
Normal file
28
build.zig
Normal 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
21
build.zig.zon
Normal 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
5131
include/glad/glad.h
Normal file
File diff suppressed because it is too large
Load Diff
2518
src/glad.c
Normal file
2518
src/glad.c
Normal file
File diff suppressed because it is too large
Load Diff
118
src/main.zig
Normal file
118
src/main.zig
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user