You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.1 KiB
116 lines
3.1 KiB
#!/usr/bin/env python |
|
# -*- coding: utf-8 -*- |
|
|
|
from imgui.integrations.sdl2 import SDL2Renderer |
|
from sdl2 import * |
|
import OpenGL.GL as gl |
|
import ctypes |
|
import imgui |
|
import sys |
|
|
|
|
|
def main(): |
|
window, gl_context = impl_pysdl2_init() |
|
imgui.create_context() |
|
impl = SDL2Renderer(window) |
|
|
|
show_custom_window = True |
|
|
|
running = True |
|
event = SDL_Event() |
|
while running: |
|
while SDL_PollEvent(ctypes.byref(event)) != 0: |
|
if event.type == SDL_QUIT: |
|
running = False |
|
break |
|
impl.process_event(event) |
|
impl.process_inputs() |
|
|
|
imgui.new_frame() |
|
|
|
|
|
#show_test_window() |
|
#imgui.show_test_window() |
|
|
|
if show_custom_window: |
|
is_expand, show_custom_window = imgui.begin("Custom window", True) |
|
if is_expand: |
|
imgui.text("Bars") |
|
imgui.text_colored("Eggs", 0.2, 1.0, 0.0) |
|
imgui.end() |
|
|
|
gl.glClearColor(1.0, 1.0, 1.0, 1) |
|
gl.glClear(gl.GL_COLOR_BUFFER_BIT) |
|
|
|
|
|
imgui.render() |
|
impl.render(imgui.get_draw_data()) |
|
SDL_GL_SwapWindow(window) |
|
|
|
impl.shutdown() |
|
SDL_GL_DeleteContext(gl_context) |
|
SDL_DestroyWindow(window) |
|
SDL_Quit() |
|
|
|
|
|
def impl_pysdl2_init(): |
|
width, height = 640, 480 |
|
window_name = "minimal ImGui/SDL2 example" |
|
|
|
if SDL_Init(SDL_INIT_EVERYTHING) < 0: |
|
print( |
|
"Error: SDL could not initialize! SDL Error: " |
|
+ SDL_GetError().decode("utf-8") |
|
) |
|
sys.exit(1) |
|
|
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) |
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24) |
|
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8) |
|
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1) |
|
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1) |
|
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8) |
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG) |
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4) |
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1) |
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE) |
|
|
|
SDL_SetHint(SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK, b"1") |
|
SDL_SetHint(SDL_HINT_VIDEO_HIGHDPI_DISABLED, b"1") |
|
|
|
window = SDL_CreateWindow( |
|
window_name.encode("utf-8"), |
|
SDL_WINDOWPOS_CENTERED, |
|
SDL_WINDOWPOS_CENTERED, |
|
width, |
|
height, |
|
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE, |
|
) |
|
|
|
if window is None: |
|
print( |
|
"Error: Window could not be created! SDL Error: " |
|
+ SDL_GetError().decode("utf-8") |
|
) |
|
sys.exit(1) |
|
|
|
gl_context = SDL_GL_CreateContext(window) |
|
if gl_context is None: |
|
print( |
|
"Error: Cannot create OpenGL Context! SDL Error: " |
|
+ SDL_GetError().decode("utf-8") |
|
) |
|
sys.exit(1) |
|
|
|
SDL_GL_MakeCurrent(window, gl_context) |
|
if SDL_GL_SetSwapInterval(1) < 0: |
|
print( |
|
"Warning: Unable to set VSync! SDL Error: " + SDL_GetError().decode("utf-8") |
|
) |
|
sys.exit(1) |
|
|
|
return window, gl_context |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |