diff --git a/kitty/data-types.c b/kitty/data-types.c index 341ff7cdd..c3e61bdfe 100644 --- a/kitty/data-types.c +++ b/kitty/data-types.c @@ -98,7 +98,8 @@ extern int init_Window(PyObject *); extern bool init_freetype_library(PyObject*); extern bool init_fontconfig_library(PyObject*); extern bool init_glfw(PyObject *m); -bool init_sprites(PyObject *module); +extern bool init_sprites(PyObject *module); +extern bool init_shaders(PyObject *module); #ifdef __APPLE__ extern int init_CoreText(PyObject *); extern bool init_cocoa(PyObject *module); @@ -124,6 +125,7 @@ PyInit_fast_data_types(void) { if (!add_module_gl_constants(m)) return NULL; if (!init_glfw(m)) return NULL; if (!init_sprites(m)) return NULL; + if (!init_shaders(m)) return NULL; if (!init_Window(m)) return NULL; #ifdef __APPLE__ if (!init_CoreText(m)) return NULL; diff --git a/kitty/main.py b/kitty/main.py index 61187b200..7ac340ae3 100644 --- a/kitty/main.py +++ b/kitty/main.py @@ -17,7 +17,7 @@ from .constants import ( appname, config_dir, isosx, logo_data_file, str_version, viewport_size ) from .fast_data_types import ( - GL_COLOR_BUFFER_BIT, GLFW_CONTEXT_VERSION_MAJOR, + GL_COLOR_BUFFER_BIT, GLFW_CONTEXT_VERSION_MAJOR, GL_VERSION_REQUIRED, GLFW_CONTEXT_VERSION_MINOR, GLFW_DECORATED, GLFW_OPENGL_CORE_PROFILE, GLFW_OPENGL_FORWARD_COMPAT, GLFW_OPENGL_PROFILE, GLFW_SAMPLES, GLFW_STENCIL_BITS, Window, change_wcwidth, check_for_extensions, @@ -26,7 +26,6 @@ from .fast_data_types import ( glfw_swap_interval, glfw_terminate, glfw_window_hint ) from .layout import all_layouts -from .shaders import GL_VERSION from .utils import detach, safe_print try: @@ -144,8 +143,8 @@ def option_parser(): def setup_opengl(opts): if opts.macos_hide_titlebar: glfw_window_hint(GLFW_DECORATED, False) - glfw_window_hint(GLFW_CONTEXT_VERSION_MAJOR, GL_VERSION[0]) - glfw_window_hint(GLFW_CONTEXT_VERSION_MINOR, GL_VERSION[1]) + glfw_window_hint(GLFW_CONTEXT_VERSION_MAJOR, GL_VERSION_REQUIRED[0]) + glfw_window_hint(GLFW_CONTEXT_VERSION_MINOR, GL_VERSION_REQUIRED[1]) glfw_window_hint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE) glfw_window_hint(GLFW_OPENGL_FORWARD_COMPAT, True) glfw_window_hint(GLFW_SAMPLES, 0) diff --git a/kitty/shaders.c b/kitty/shaders.c new file mode 100644 index 000000000..bea0becf8 --- /dev/null +++ b/kitty/shaders.c @@ -0,0 +1,24 @@ +/* + * shaders.c + * Copyright (C) 2017 Kovid Goyal + * + * Distributed under terms of the GPL3 license. + */ + +#include "data-types.h" + +#define GL_VERSION_MAJOR 3 +#define GL_VERSION_MINOR 3 +#define GLSL_VERSION (GL_VERSION_MAJOR * 100 + GL_VERSION_MINOR * 10) + +enum Program { CELL_PROGRAM, CURSOR_PROGRAM, BORDERS_PROGRAM}; + +bool +init_shaders(PyObject *module) { +#define C(x) if (PyModule_AddIntConstant(module, #x, x) != 0) { PyErr_NoMemory(); return false; } + C(CELL_PROGRAM); C(CURSOR_PROGRAM); C(BORDERS_PROGRAM); + C(GLSL_VERSION); +#undef C + PyModule_AddObject(module, "GL_VERSION_REQUIRED", Py_BuildValue("II", GL_VERSION_MAJOR, GL_VERSION_MINOR)); + return true; +} diff --git a/kitty/shaders.py b/kitty/shaders.py index 3fb896cc6..9f1997130 100644 --- a/kitty/shaders.py +++ b/kitty/shaders.py @@ -16,26 +16,25 @@ from .fast_data_types import ( GL_TEXTURE0, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TRUE, GL_UNIFORM_BUFFER, GL_UNPACK_ALIGNMENT, GL_UNSIGNED_BYTE, GL_VERTEX_SHADER, - GL_WRITE_ONLY, copy_image_sub_data, get_uniform_block_offsets, - get_uniform_block_size, glActiveTexture, glAttachShader, glBindBuffer, - glBindBufferBase, glBindTexture, glBindVertexArray, glCompileShader, - glCopyImageSubData, glCreateProgram, glCreateShader, glDeleteBuffer, - glDeleteProgram, glDeleteShader, glDeleteTexture, glDeleteVertexArray, - glEnableVertexAttribArray, glGenBuffers, glGenTextures, glGenVertexArrays, - glGetAttribLocation, glGetBufferSubData, glGetIntegerv, - glGetProgramInfoLog, glGetProgramiv, glGetShaderInfoLog, glGetShaderiv, - glGetUniformBlockIndex, glGetUniformLocation, glLinkProgram, glMapBuffer, - glPixelStorei, glShaderSource, glTexParameteri, glTexStorage3D, - glTexSubImage3D, glUnmapBuffer, glUseProgram, glVertexAttribDivisor, - glVertexAttribPointer, render_dirty_sprites, replace_or_create_buffer, - sprite_map_current_layout, sprite_map_free, sprite_map_increment, - sprite_map_set_layout, sprite_map_set_limits + GL_WRITE_ONLY, GLSL_VERSION, copy_image_sub_data, + get_uniform_block_offsets, get_uniform_block_size, glActiveTexture, + glAttachShader, glBindBuffer, glBindBufferBase, glBindTexture, + glBindVertexArray, glCompileShader, glCopyImageSubData, glCreateProgram, + glCreateShader, glDeleteBuffer, glDeleteProgram, glDeleteShader, + glDeleteTexture, glDeleteVertexArray, glEnableVertexAttribArray, + glGenBuffers, glGenTextures, glGenVertexArrays, glGetAttribLocation, + glGetBufferSubData, glGetIntegerv, glGetProgramInfoLog, glGetProgramiv, + glGetShaderInfoLog, glGetShaderiv, glGetUniformBlockIndex, + glGetUniformLocation, glLinkProgram, glMapBuffer, glPixelStorei, + glShaderSource, glTexParameteri, glTexStorage3D, glTexSubImage3D, + glUnmapBuffer, glUseProgram, glVertexAttribDivisor, glVertexAttribPointer, + render_dirty_sprites, replace_or_create_buffer, sprite_map_current_layout, + sprite_map_free, sprite_map_increment, sprite_map_set_layout, + sprite_map_set_limits ) from .fonts.render import render_cell from .utils import safe_print -GL_VERSION = (3, 3) -VERSION = GL_VERSION[0] * 100 + GL_VERSION[1] * 10 UBO = namedtuple('UBO', 'size index offsets buf_id') BASE = os.path.dirname(os.path.abspath(__file__)) @@ -333,7 +332,7 @@ class ShaderProgram: # {{{ def add_shader(self, source: str, shader_type: int) -> int: ' Compile a shader and return its id, or raise an exception if compilation fails ' shader_id = glCreateShader(shader_type) - source = source.replace('GLSL_VERSION', str(VERSION), 1) + source = source.replace('GLSL_VERSION', str(GLSL_VERSION), 1) try: glShaderSource(shader_id, source) glCompileShader(shader_id)