Skip to content

Commit e92b064

Browse files
committed
zopengl: Add core gl 4.0 bindings
1 parent 67b2ae9 commit e92b064

File tree

5 files changed

+199
-6
lines changed

5 files changed

+199
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ pub fn build(b: *std.Build) void {
9999
|-------------------------------|----------------|----------------------------------------------------------------------------------------------------------------------------|
100100
| **[zphysics](libs/zphysics)** | 0.0.6 | Zig API and C API for [Jolt Physics](https://github.com/jrouwe/JoltPhysics) |
101101
| **[zflecs](libs/zflecs)** | 0.0.1 | Zig bindings for [flecs](https://github.com/SanderMertens/flecs) ECS |
102-
| **[zopengl](libs/zopengl)** | 0.1.1 | OpenGL loader (supports 3.3 Core Profile and ES 2.0 Profile) |
102+
| **[zopengl](libs/zopengl)** | 0.1.2 | OpenGL loader (supports 4.0 Core Profile and ES 2.0 Profile) |
103103
| **[zsdl](libs/zsdl)** | 0.0.1 | Bindings for SDL2 (wip) |
104104
| **[zgpu](libs/zgpu)** | 0.9.1 | Small helper library built on top of native wgpu implementation ([Dawn](https://github.com/michal-z/dawn-bin)) |
105105
| **[zgui](libs/zgui)** | 1.89.6 | Easy to use [dear imgui](https://github.com/ocornut/imgui) bindings (includes [ImPlot](https://github.com/epezent/implot)) |

libs/zopengl/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# zopengl - OpenGL loader
22

33
Supports:
4-
* OpenGL Core Profile up to version 3.3
4+
* OpenGL Core Profile up to version 4.0
55
* OpenGL ES up to version 2.0
66

77
## Getting started
@@ -33,7 +33,7 @@ const gl = @import("zopengl");
3333
pub fn main() !void {
3434
// Create window and OpenGL context here... (you can use our `zsdl` or `zglfw` libs for this)
3535
36-
try gl.loadCoreProfile(getProcAddress, 3, 3);
36+
try gl.loadCoreProfile(getProcAddress, 4, 0);
3737
3838
gl.clearBufferfv(gl.COLOR, 0, &[_]f32{ 0.2, 0.4, 0.8, 1.0 });
3939
}

libs/zopengl/src/bindings.zig

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1966,6 +1966,154 @@ pub var vertexAttribP4uiv: *const fn (
19661966
normalized: Boolean,
19671967
value: [*c]const Uint,
19681968
) callconv(.C) void = undefined;
1969+
1970+
//--------------------------------------------------------------------------------------------------
1971+
//
1972+
// OpenGL 4.0 (Core Profile)
1973+
//
1974+
//--------------------------------------------------------------------------------------------------
1975+
pub const SAMPLE_SHADING = 0x8C36;
1976+
pub const MIN_SAMPLE_SHADING_VALUE = 0x8C37;
1977+
pub const MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5E;
1978+
pub const MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 0x8E5F;
1979+
pub const TEXTURE_CUBE_MAP_ARRAY = 0x9009;
1980+
pub const TEXTURE_BINDING_CUBE_MAP_ARRAY = 0x900A;
1981+
pub const PROXY_TEXTURE_CUBE_MAP_ARRAY = 0x900B;
1982+
pub const SAMPLER_CUBE_MAP_ARRAY = 0x900C;
1983+
pub const SAMPLER_CUBE_MAP_ARRAY_SHADOW = 0x900D;
1984+
pub const INT_SAMPLER_CUBE_MAP_ARRAY = 0x900E;
1985+
pub const UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 0x900F;
1986+
pub const DRAW_INDIRECT_BUFFER = 0x8F3F;
1987+
pub const DRAW_INDIRECT_BUFFER_BINDING = 0x8F43;
1988+
pub const GEOMETRY_SHADER_INVOCATIONS = 0x887F;
1989+
pub const MAX_GEOMETRY_SHADER_INVOCATIONS = 0x8E5A;
1990+
pub const MIN_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5B;
1991+
pub const MAX_FRAGMENT_INTERPOLATION_OFFSET = 0x8E5C;
1992+
pub const FRAGMENT_INTERPOLATION_OFFSET_BITS = 0x8E5D;
1993+
pub const MAX_VERTEX_STREAMS = 0x8E71;
1994+
pub const DOUBLE_VEC2 = 0x8FFC;
1995+
pub const DOUBLE_VEC3 = 0x8FFD;
1996+
pub const DOUBLE_VEC4 = 0x8FFE;
1997+
pub const DOUBLE_MAT2 = 0x8F46;
1998+
pub const DOUBLE_MAT3 = 0x8F47;
1999+
pub const DOUBLE_MAT4 = 0x8F48;
2000+
pub const DOUBLE_MAT2x3 = 0x8F49;
2001+
pub const DOUBLE_MAT2x4 = 0x8F4A;
2002+
pub const DOUBLE_MAT3x2 = 0x8F4B;
2003+
pub const DOUBLE_MAT3x4 = 0x8F4C;
2004+
pub const DOUBLE_MAT4x2 = 0x8F4D;
2005+
pub const DOUBLE_MAT4x3 = 0x8F4E;
2006+
pub const ACTIVE_SUBROUTINES = 0x8DE5;
2007+
pub const ACTIVE_SUBROUTINE_UNIFORMS = 0x8DE6;
2008+
pub const ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = 0x8E47;
2009+
pub const ACTIVE_SUBROUTINE_MAX_LENGTH = 0x8E48;
2010+
pub const ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = 0x8E49;
2011+
pub const MAX_SUBROUTINES = 0x8DE7;
2012+
pub const MAX_SUBROUTINE_UNIFORM_LOCATIONS = 0x8DE8;
2013+
pub const NUM_COMPATIBLE_SUBROUTINES = 0x8E4A;
2014+
pub const COMPATIBLE_SUBROUTINES = 0x8E4B;
2015+
pub const PATCHES = 0x000E;
2016+
pub const PATCH_VERTICES = 0x8E72;
2017+
pub const PATCH_DEFAULT_INNER_LEVEL = 0x8E73;
2018+
pub const PATCH_DEFAULT_OUTER_LEVEL = 0x8E74;
2019+
pub const TESS_CONTROL_OUTPUT_VERTICES = 0x8E75;
2020+
pub const TESS_GEN_MODE = 0x8E76;
2021+
pub const TESS_GEN_SPACING = 0x8E77;
2022+
pub const TESS_GEN_VERTEX_ORDER = 0x8E78;
2023+
pub const TESS_GEN_POINT_MODE = 0x8E79;
2024+
pub const ISOLINES = 0x8E7A;
2025+
pub const FRACTIONAL_ODD = 0x8E7B;
2026+
pub const FRACTIONAL_EVEN = 0x8E7C;
2027+
pub const MAX_PATCH_VERTICES = 0x8E7D;
2028+
pub const MAX_TESS_GEN_LEVEL = 0x8E7E;
2029+
pub const MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E7F;
2030+
pub const MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E80;
2031+
pub const MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 0x8E81;
2032+
pub const MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 0x8E82;
2033+
pub const MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 0x8E83;
2034+
pub const MAX_TESS_PATCH_COMPONENTS = 0x8E84;
2035+
pub const MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 0x8E85;
2036+
pub const MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 0x8E86;
2037+
pub const MAX_TESS_CONTROL_UNIFORM_BLOCKS = 0x8E89;
2038+
pub const MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 0x8E8A;
2039+
pub const MAX_TESS_CONTROL_INPUT_COMPONENTS = 0x886C;
2040+
pub const MAX_TESS_EVALUATION_INPUT_COMPONENTS = 0x886D;
2041+
pub const MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 0x8E1E;
2042+
pub const MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 0x8E1F;
2043+
pub const UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = 0x84F0;
2044+
pub const UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = 0x84F1;
2045+
pub const TESS_EVALUATION_SHADER = 0x8E87;
2046+
pub const TESS_CONTROL_SHADER = 0x8E88;
2047+
pub const TRANSFORM_FEEDBACK = 0x8E22;
2048+
pub const TRANSFORM_FEEDBACK_BUFFER_PAUSED = 0x8E23;
2049+
pub const TRANSFORM_FEEDBACK_BUFFER_ACTIVE = 0x8E24;
2050+
pub const TRANSFORM_FEEDBACK_BINDING = 0x8E25;
2051+
pub const MAX_TRANSFORM_FEEDBACK_BUFFERS = 0x8E70;
2052+
2053+
pub const DrawArraysIndirectCommand = extern struct {
2054+
count: Uint,
2055+
instance_count: Uint,
2056+
first: Uint,
2057+
/// base_instance should always be set to zero for GL versions < 4.2
2058+
base_instance: Uint = 0,
2059+
};
2060+
2061+
pub const DrawElementsIndirectCommand = extern struct {
2062+
count: Uint,
2063+
instance_count: Uint,
2064+
first_index: Uint,
2065+
base_vertex: Int,
2066+
/// base_instance should always be set to zero for GL versions < 4.2
2067+
base_instance: Uint = 0,
2068+
};
2069+
2070+
pub var minSampleShading: *const fn (value: Float) callconv(.C) void = undefined;
2071+
pub var blendEquationi: *const fn (buf: Uint, mode: Enum) callconv(.C) void = undefined;
2072+
pub var blendEquationSeparatei: *const fn (buf: Uint, modeRGB: Enum, modeAlpha: Enum) callconv(.C) void = undefined;
2073+
pub var blendFunci: *const fn (buf: Uint, src: Enum, dst: Enum) callconv(.C) void = undefined;
2074+
pub var blendFuncSeparatei: *const fn (buf: Uint, srcRGB: Enum, dstRGB: Enum, srcAlpha: Enum, dstAlpha: Enum) callconv(.C) void = undefined;
2075+
pub var drawArraysIndirect: *const fn (mode: Enum, indirect: *const DrawArraysIndirectCommand) callconv(.C) void = undefined;
2076+
pub var drawElementsIndirect: *const fn (mode: Enum, type: Enum, indirect: *const DrawElementsIndirectCommand) callconv(.C) void = undefined;
2077+
pub var uniform1d: *const fn (location: Int, x: Double) callconv(.C) void = undefined;
2078+
pub var uniform2d: *const fn (location: Int, x: Double, y: Double) callconv(.C) void = undefined;
2079+
pub var uniform3d: *const fn (location: Int, x: Double, y: Double, z: Double) callconv(.C) void = undefined;
2080+
pub var uniform4d: *const fn (location: Int, x: Double, y: Double, z: Double, w: Double) callconv(.C) void = undefined;
2081+
pub var uniform1dv: *const fn (location: Int, count: Sizei, value: [*c]const Double) callconv(.C) void = undefined;
2082+
pub var uniform2dv: *const fn (location: Int, count: Sizei, value: [*c]const Double) callconv(.C) void = undefined;
2083+
pub var uniform3dv: *const fn (location: Int, count: Sizei, value: [*c]const Double) callconv(.C) void = undefined;
2084+
pub var uniform4dv: *const fn (location: Int, count: Sizei, value: [*c]const Double) callconv(.C) void = undefined;
2085+
pub var uniformMatrix2dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2086+
pub var uniformMatrix3dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2087+
pub var uniformMatrix4dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2088+
pub var uniformMatrix2x3dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2089+
pub var uniformMatrix2x4dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2090+
pub var uniformMatrix3x2dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2091+
pub var uniformMatrix3x4dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2092+
pub var uniformMatrix4x2dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2093+
pub var uniformMatrix4x3dv: *const fn (location: Int, count: Sizei, transpose: Boolean, value: [*c]const Double) callconv(.C) void = undefined;
2094+
pub var getUniformdv: *const fn (program: Uint, location: Int, params: [*c]Double) callconv(.C) void = undefined;
2095+
pub var getSubroutineUniformLocation: *const fn (program: Uint, shadertype: Enum, name: [*c]const Char) callconv(.C) Int = undefined;
2096+
pub var getSubroutineIndex: *const fn (program: Uint, shadertype: Enum, name: [*c]const Char) callconv(.C) Uint = undefined;
2097+
pub var getActiveSubroutineUniformiv: *const fn (program: Uint, shadertype: Enum, index: Uint, pname: Enum, values: [*c]Int) callconv(.C) void = undefined;
2098+
pub var getActiveSubroutineUniformName: *const fn (program: Uint, shadertype: Enum, index: Uint, bufsize: Sizei, length: [*c]Sizei, name: [*c]Char) callconv(.C) void = undefined;
2099+
pub var getActiveSubroutineName: *const fn (program: Uint, shadertype: Enum, index: Uint, bufsize: Sizei, length: [*c]Sizei, name: [*c]Char) callconv(.C) void = undefined;
2100+
pub var uniformSubroutinesuiv: *const fn (shadertype: Enum, count: Sizei, indices: [*c]const Uint) callconv(.C) void = undefined;
2101+
pub var getUniformSubroutineuiv: *const fn (shadertype: Enum, location: Int, params: [*c]const Uint) callconv(.C) void = undefined;
2102+
pub var getProgramStageiv: *const fn (program: Uint, shadertype: Enum, pname: Enum, values: [*c]Int) callconv(.C) void = undefined;
2103+
pub var patchParameteri: *const fn (pname: Enum, value: Int) callconv(.C) void = undefined;
2104+
pub var patchParameterfv: *const fn (pname: Enum, values: [*c]const Float) callconv(.C) void = undefined;
2105+
pub var bindTransformFeedback: *const fn (target: Enum, id: Uint) callconv(.C) Boolean = undefined;
2106+
pub var deleteTransformFeedbacks: *const fn (n: Sizei, ids: [*c]const Uint) callconv(.C) void = undefined;
2107+
pub var genTransformFeedbacks: *const fn (n: Sizei, ids: [*c]Uint) callconv(.C) void = undefined;
2108+
pub var isTransformFeedback: *const fn (id: Uint) callconv(.C) void = undefined;
2109+
pub var pauseTransformFeedback: *const fn () callconv(.C) void = undefined;
2110+
pub var resumeTransformFeedback: *const fn () callconv(.C) void = undefined;
2111+
pub var drawTransformFeedback: *const fn (mode: Enum, id: Uint) callconv(.C) void = undefined;
2112+
pub var drawTransformFeedbackStream: *const fn (mode: Enum, id: Uint, stream: Uint) callconv(.C) void = undefined;
2113+
pub var beginQueryIndexed: *const fn (target: Enum, index: Uint, id: Uint) callconv(.C) void = undefined;
2114+
pub var endQueryIndexed: *const fn (target: Enum, index: Uint) callconv(.C) void = undefined;
2115+
pub var glGetQueryIndexediv: *const fn (target: Enum, index: Uint, pname: Enum, params: [*c]Int) callconv(.C) void = undefined;
2116+
19692117
//--------------------------------------------------------------------------------------------------
19702118
//
19712119
// OpenGL 4.1 (Core Profile)

libs/zopengl/src/zopengl.zig

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,52 @@ pub fn loadCoreProfile(loader: LoaderFn, major: u32, minor: u32) !void {
677677

678678
// OpenGL 4.0
679679
if (ver >= 40) {
680-
// TODO
680+
bindings.minSampleShading = try getProcAddress(@TypeOf(bindings.minSampleShading), "glMinSampleShading");
681+
bindings.blendEquationi = try getProcAddress(@TypeOf(bindings.blendEquationi), "glBlendEquationi");
682+
bindings.blendEquationSeparatei = try getProcAddress(@TypeOf(bindings.blendEquationSeparatei), "glBlendEquationSeparatei");
683+
bindings.blendFunci = try getProcAddress(@TypeOf(bindings.blendFunci), "glBlendFunci");
684+
bindings.blendFuncSeparatei = try getProcAddress(@TypeOf(bindings.blendFuncSeparatei), "glBlendFuncSeparatei");
685+
bindings.drawArraysIndirect = try getProcAddress(@TypeOf(bindings.drawArraysIndirect), "glDrawArraysIndirect");
686+
bindings.drawElementsIndirect = try getProcAddress(@TypeOf(bindings.drawElementsIndirect), "glDrawElementsIndirect");
687+
bindings.uniform1d = try getProcAddress(@TypeOf(bindings.uniform1d), "glUniform1d");
688+
bindings.uniform2d = try getProcAddress(@TypeOf(bindings.uniform2d), "glUniform2d");
689+
bindings.uniform3d = try getProcAddress(@TypeOf(bindings.uniform3d), "glUniform3d");
690+
bindings.uniform4d = try getProcAddress(@TypeOf(bindings.uniform4d), "glUniform4d");
691+
bindings.uniform1dv = try getProcAddress(@TypeOf(bindings.uniform1dv), "glUniform1dv");
692+
bindings.uniform2dv = try getProcAddress(@TypeOf(bindings.uniform2dv), "glUniform2dv");
693+
bindings.uniform3dv = try getProcAddress(@TypeOf(bindings.uniform3dv), "glUniform3dv");
694+
bindings.uniform4dv = try getProcAddress(@TypeOf(bindings.uniform4dv), "glUniform4dv");
695+
bindings.uniformMatrix2dv = try getProcAddress(@TypeOf(bindings.uniformMatrix2dv), "glUniformMatrix2dv");
696+
bindings.uniformMatrix3dv = try getProcAddress(@TypeOf(bindings.uniformMatrix3dv), "glUniformMatrix3dv");
697+
bindings.uniformMatrix4dv = try getProcAddress(@TypeOf(bindings.uniformMatrix4dv), "glUniformMatrix4dv");
698+
bindings.uniformMatrix2x3dv = try getProcAddress(@TypeOf(bindings.uniformMatrix2x3dv), "glUniformMatrix2x3dv");
699+
bindings.uniformMatrix2x4dv = try getProcAddress(@TypeOf(bindings.uniformMatrix2x4dv), "glUniformMatrix2x4dv");
700+
bindings.uniformMatrix3x2dv = try getProcAddress(@TypeOf(bindings.uniformMatrix3x2dv), "glUniformMatrix3x2dv");
701+
bindings.uniformMatrix3x4dv = try getProcAddress(@TypeOf(bindings.uniformMatrix3x4dv), "glUniformMatrix3x4dv");
702+
bindings.uniformMatrix4x2dv = try getProcAddress(@TypeOf(bindings.uniformMatrix4x2dv), "glUniformMatrix4x2dv");
703+
bindings.uniformMatrix4x3dv = try getProcAddress(@TypeOf(bindings.uniformMatrix4x3dv), "glUniformMatrix4x3dv");
704+
bindings.getUniformdv = try getProcAddress(@TypeOf(bindings.getUniformdv), "glGetUniformdv");
705+
bindings.getSubroutineUniformLocation = try getProcAddress(@TypeOf(bindings.getSubroutineUniformLocation), "glGetSubroutineUniformLocation");
706+
bindings.getSubroutineIndex = try getProcAddress(@TypeOf(bindings.getSubroutineIndex), "glGetSubroutineIndex");
707+
bindings.getActiveSubroutineUniformiv = try getProcAddress(@TypeOf(bindings.getActiveSubroutineUniformiv), "glGetActiveSubroutineUniformiv");
708+
bindings.getActiveSubroutineUniformName = try getProcAddress(@TypeOf(bindings.getActiveSubroutineUniformName), "glGetActiveSubroutineUniformName");
709+
bindings.getActiveSubroutineName = try getProcAddress(@TypeOf(bindings.getActiveSubroutineName), "glGetActiveSubroutineName");
710+
bindings.uniformSubroutinesuiv = try getProcAddress(@TypeOf(bindings.uniformSubroutinesuiv), "glUniformSubroutinesuiv");
711+
bindings.getUniformSubroutineuiv = try getProcAddress(@TypeOf(bindings.getUniformSubroutineuiv), "glGetUniformSubroutineuiv");
712+
bindings.getProgramStageiv = try getProcAddress(@TypeOf(bindings.getProgramStageiv), "glGetProgramStageiv");
713+
bindings.patchParameteri = try getProcAddress(@TypeOf(bindings.patchParameteri), "glPatchParameteri");
714+
bindings.patchParameterfv = try getProcAddress(@TypeOf(bindings.patchParameterfv), "glPatchParameterfv");
715+
bindings.bindTransformFeedback = try getProcAddress(@TypeOf(bindings.bindTransformFeedback), "glBindTransformFeedback");
716+
bindings.deleteTransformFeedbacks = try getProcAddress(@TypeOf(bindings.deleteTransformFeedbacks), "glDeleteTransformFeedbacks");
717+
bindings.genTransformFeedbacks = try getProcAddress(@TypeOf(bindings.genTransformFeedbacks), "glGenTransformFeedbacks");
718+
bindings.isTransformFeedback = try getProcAddress(@TypeOf(bindings.isTransformFeedback), "glIsTransformFeedback");
719+
bindings.pauseTransformFeedback = try getProcAddress(@TypeOf(bindings.pauseTransformFeedback), "glPauseTransformFeedback");
720+
bindings.resumeTransformFeedback = try getProcAddress(@TypeOf(bindings.resumeTransformFeedback), "glResumeTransformFeedback");
721+
bindings.drawTransformFeedback = try getProcAddress(@TypeOf(bindings.drawTransformFeedback), "glDrawTransformFeedback");
722+
bindings.drawTransformFeedbackStream = try getProcAddress(@TypeOf(bindings.drawTransformFeedbackStream), "glDrawTransformFeedbackStream");
723+
bindings.beginQueryIndexed = try getProcAddress(@TypeOf(bindings.beginQueryIndexed), "glBeginQueryIndexed");
724+
bindings.endQueryIndexed = try getProcAddress(@TypeOf(bindings.endQueryIndexed), "glEndQueryIndexed");
725+
bindings.glGetQueryIndexediv = try getProcAddress(@TypeOf(bindings.glGetQueryIndexediv), "glGetQueryIndexediv");
681726
}
682727

683728
// OpenGL 4.1

samples/minimal_glfw_gl/src/minimal_glfw_gl.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ pub fn main() !void {
66
try glfw.init();
77
defer glfw.terminate();
88

9-
const gl_major = 3;
10-
const gl_minor = 3;
9+
const gl_major = 4;
10+
const gl_minor = 0;
1111
glfw.windowHintTyped(.context_version_major, gl_major);
1212
glfw.windowHintTyped(.context_version_minor, gl_minor);
1313
glfw.windowHintTyped(.opengl_profile, .opengl_core_profile);

0 commit comments

Comments
 (0)