List of usage examples for org.lwjgl.opengl KHRDebug GL_DEBUG_SOURCE_API
int GL_DEBUG_SOURCE_API
To view the source code for org.lwjgl.opengl KHRDebug GL_DEBUG_SOURCE_API.
Click Source Link
From source file:org.lwjgl.demo.nuklear.GLFWDemo.java
License:Open Source License
private void run() { GLFWErrorCallback.createPrint().set(); if (!glfwInit()) { throw new IllegalStateException("Unable to initialize glfw"); }/*from ww w . j a v a2s . c o m*/ glfwDefaultWindowHints(); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); if (Platform.get() == Platform.MACOSX) { glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); } glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); int WINDOW_WIDTH = 640; int WINDOW_HEIGHT = 640; win = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "GLFW Nuklear Demo", NULL, NULL); if (win == NULL) { throw new RuntimeException("Failed to create the GLFW window"); } glfwMakeContextCurrent(win); GLCapabilities caps = GL.createCapabilities(); Callback debugProc = GLUtil.setupDebugMessageCallback(); if (caps.OpenGL43) { glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_OTHER, GL_DEBUG_SEVERITY_NOTIFICATION, (IntBuffer) null, false); } else if (caps.GL_KHR_debug) { KHRDebug.glDebugMessageControl(KHRDebug.GL_DEBUG_SOURCE_API, KHRDebug.GL_DEBUG_TYPE_OTHER, KHRDebug.GL_DEBUG_SEVERITY_NOTIFICATION, (IntBuffer) null, false); } else if (caps.GL_ARB_debug_output) { glDebugMessageControlARB(GL_DEBUG_SOURCE_API_ARB, GL_DEBUG_TYPE_OTHER_ARB, GL_DEBUG_SEVERITY_LOW_ARB, (IntBuffer) null, false); } NkContext ctx = setupWindow(win); int BITMAP_W = 1024; int BITMAP_H = 1024; int FONT_HEIGHT = 18; int fontTexID = glGenTextures(); STBTTFontinfo fontInfo = STBTTFontinfo.create(); STBTTPackedchar.Buffer cdata = STBTTPackedchar.create(95); float scale; float descent; try (MemoryStack stack = stackPush()) { stbtt_InitFont(fontInfo, ttf); scale = stbtt_ScaleForPixelHeight(fontInfo, FONT_HEIGHT); IntBuffer d = stack.mallocInt(1); stbtt_GetFontVMetrics(fontInfo, null, d, null); descent = d.get(0) * scale; ByteBuffer bitmap = memAlloc(BITMAP_W * BITMAP_H); STBTTPackContext pc = STBTTPackContext.mallocStack(stack); stbtt_PackBegin(pc, bitmap, BITMAP_W, BITMAP_H, 0, 1, NULL); stbtt_PackSetOversampling(pc, 4, 4); stbtt_PackFontRange(pc, ttf, 0, FONT_HEIGHT, 32, cdata); stbtt_PackEnd(pc); // Convert R8 to RGBA8 ByteBuffer texture = memAlloc(BITMAP_W * BITMAP_H * 4); for (int i = 0; i < bitmap.capacity(); i++) { texture.putInt((bitmap.get(i) << 24) | 0x00FFFFFF); } texture.flip(); glBindTexture(GL_TEXTURE_2D, fontTexID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, BITMAP_W, BITMAP_H, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); memFree(texture); memFree(bitmap); } default_font.width((handle, h, text, len) -> { float text_width = 0; try (MemoryStack stack = stackPush()) { IntBuffer unicode = stack.mallocInt(1); int glyph_len = nnk_utf_decode(text, memAddress(unicode), len); int text_len = glyph_len; if (glyph_len == 0) { return 0; } IntBuffer advance = stack.mallocInt(1); while (text_len <= len && glyph_len != 0) { if (unicode.get(0) == NK_UTF_INVALID) { break; } /* query currently drawn glyph information */ stbtt_GetCodepointHMetrics(fontInfo, unicode.get(0), advance, null); text_width += advance.get(0) * scale; /* offset next glyph */ glyph_len = nnk_utf_decode(text + text_len, memAddress(unicode), len - text_len); text_len += glyph_len; } } return text_width; }).height(FONT_HEIGHT).query((handle, font_height, glyph, codepoint, next_codepoint) -> { try (MemoryStack stack = stackPush()) { FloatBuffer x = stack.floats(0.0f); FloatBuffer y = stack.floats(0.0f); STBTTAlignedQuad q = STBTTAlignedQuad.mallocStack(stack); IntBuffer advance = stack.mallocInt(1); stbtt_GetPackedQuad(cdata, BITMAP_W, BITMAP_H, codepoint - 32, x, y, q, false); stbtt_GetCodepointHMetrics(fontInfo, codepoint, advance, null); NkUserFontGlyph ufg = NkUserFontGlyph.create(glyph); ufg.width(q.x1() - q.x0()); ufg.height(q.y1() - q.y0()); ufg.offset().set(q.x0(), q.y0() + (FONT_HEIGHT + descent)); ufg.xadvance(advance.get(0) * scale); ufg.uv(0).set(q.s0(), q.t0()); ufg.uv(1).set(q.s1(), q.t1()); } }).texture().id(fontTexID); nk_style_set_font(ctx, default_font); glfwShowWindow(win); while (!glfwWindowShouldClose(win)) { /* Input */ newFrame(); demo.layout(ctx, 50, 50); calc.layout(ctx, 300, 50); try (MemoryStack stack = stackPush()) { IntBuffer width = stack.mallocInt(1); IntBuffer height = stack.mallocInt(1); glfwGetWindowSize(win, width, height); glViewport(0, 0, width.get(0), height.get(0)); NkColorf bg = demo.background; glClearColor(bg.r(), bg.g(), bg.b(), bg.a()); } glClear(GL_COLOR_BUFFER_BIT); /* * IMPORTANT: `nk_glfw_render` modifies some global OpenGL state * with blending, scissor, face culling, depth test and viewport and * defaults everything back into a default state. * Make sure to either a.) save and restore or b.) reset your own state after * rendering the UI. */ render(NK_ANTI_ALIASING_ON, MAX_VERTEX_BUFFER, MAX_ELEMENT_BUFFER); glfwSwapBuffers(win); } shutdown(); glfwFreeCallbacks(win); if (debugProc != null) { debugProc.free(); } glfwTerminate(); Objects.requireNonNull(glfwSetErrorCallback(null)).free(); }