最初コミット
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