gl-rs | An OpenGL function pointer loader for Rust | Graphics library

 by   brendanzab Rust Version: gl-v0.14.0 License: Apache-2.0

kandi X-RAY | gl-rs Summary

kandi X-RAY | gl-rs Summary

gl-rs is a Rust library typically used in User Interface, Graphics applications. gl-rs has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.

This repository contains the necessary building blocks for OpenGL wrapper libraries. For more information on each crate, see their respective READMEs listed below.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              gl-rs has a low active ecosystem.
              It has 635 star(s) with 114 fork(s). There are 12 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              There are 26 open issues and 120 have been closed. On average issues are closed in 239 days. There are 5 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of gl-rs is gl-v0.14.0

            kandi-Quality Quality

              gl-rs has no bugs reported.

            kandi-Security Security

              gl-rs has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.

            kandi-License License

              gl-rs is licensed under the Apache-2.0 License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              gl-rs releases are not available. You will need to build from source code and install.
              Installation instructions are not available. Examples and code snippets are available.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of gl-rs
            Get all kandi verified functions for this library.

            gl-rs Key Features

            No Key Features are available at this moment for gl-rs.

            gl-rs Examples and Code Snippets

            No Code Snippets are available at this moment for gl-rs.

            Community Discussions

            QUESTION

            How to use OpenGL function pointers between an executable and DLL?
            Asked 2021-Feb-20 at 04:48

            I am trying to make a plugin-based game in Rust, and I am having some difficulties. The way I am making my plugins is through the method shared on this question. At runtime, I will dynamically load all the necessary functions from the plugins, and run them later when they need to be run.
            My problem is in using OpenGL to draw things to the screen with the code of one of these plugins. In my game's executable, I load all the functions from the plugins (currently only one function), create the GLFW window and load the OpenGL function pointers, following the code shown below, from here.

            ...

            ANSWER

            Answered 2021-Feb-20 at 04:48

            while not loading the function pointers in again in each plugin?

            You can't. Not unless the executable you're working with exports all of those OpenGL function pointers, or you're importing a common DLL that exports those function pointers.

            Each DLL and executable is distinct and for the most part entirely separate from other executables. Unless they explicitly share something, then it's not shared. And most programs don't explicitly share their OpenGL function pointers, so you'll have to load them yourself.

            Source https://stackoverflow.com/questions/66288101

            QUESTION

            How to set offset for VertexAttribPointer with rust?
            Asked 2020-Jan-12 at 08:22

            I was playing around with gl-rs and in the original opengl tutorial they set VertexAttribPointer and it's offset with:

            ...

            ANSWER

            Answered 2020-Jan-12 at 08:22

            The last parameter (offset) has to be cast to *const gl::types::GLvoid:

            Source https://stackoverflow.com/questions/59702018

            QUESTION

            Win32 OpenGL Window in rust: unable to load certain function pointers
            Asked 2018-Feb-28 at 16:40
            #[cfg(windows)] extern crate winapi;
            
            #[cfg(windows)] use winapi::shared::windef::HWND;
            #[cfg(windows)] use winapi::shared::windef::HMENU;
            #[cfg(windows)] use winapi::shared::windef::HBRUSH;
            #[cfg(windows)] use winapi::shared::minwindef::HINSTANCE;
            
            #[cfg(windows)] use winapi::shared::minwindef::UINT;
            #[cfg(windows)] use winapi::shared::minwindef::DWORD;
            #[cfg(windows)] use winapi::shared::minwindef::WPARAM;
            #[cfg(windows)] use winapi::shared::minwindef::LPARAM;
            #[cfg(windows)] use winapi::shared::minwindef::LRESULT;
            #[cfg(windows)] use winapi::um::winnt::LPCWSTR;
            
            #[cfg(windows)] use winapi::um::winuser::WS_OVERLAPPEDWINDOW;
            #[cfg(windows)] use winapi::um::winuser::WS_VISIBLE;
            #[cfg(windows)] use winapi::um::winuser::WNDCLASSW;
            
            #[cfg(windows)] use std::os::windows::ffi::OsStrExt;
            #[cfg(windows)] use std::ffi::OsStr;
            
            #[cfg(windows)] use std::os::raw::c_void;
            #[cfg(windows)] use winapi::um::libloaderapi::GetProcAddress;
            #[cfg(windows)] use gl::types::*;
            
            // Vertex data
            static VERTEX_DATA: [GLfloat; 6] = [0.0, 0.5, 0.5, -0.5, -0.5, -0.5];
            
            // Shader sources
            static VS_SRC: &'static str = "
            #version 150
            in vec2 position;
            void main() {
                gl_Position = vec4(position, 0.0, 1.0);
            }";
            
            static FS_SRC: &'static str = "
            #version 150
            out vec4 out_color;
            void main() {
                out_color = vec4(1.0, 1.0, 1.0, 1.0);
            }";
            
            mod gl
            {
                include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
            }
            
            #[cfg(windows)]
            fn to_wstring(str : &str) -> Vec
            {
                let v : Vec =
                        OsStr::new(str).encode_wide().chain(Some(0).into_iter()).collect();
                v
            }
            
            #[cfg(windows)]
            pub unsafe extern "system" fn window_proc(h_wnd :HWND,
                msg :UINT, w_param :WPARAM, l_param :LPARAM) -> LRESULT
            {
                if msg == winapi::um::winuser::WM_DESTROY {
                    winapi::um::winuser::PostQuitMessage(0i32);
                }
                return winapi::um::winuser::DefWindowProcW(h_wnd, msg, w_param, l_param);
            }
            
            fn draw_gl_scene(window_width: i32, window_height: i32,
                    h_dc: winapi::shared::windef::HDC)
            {
                unsafe
                {
                    let module = winapi::um::libloaderapi::LoadLibraryW(to_wstring("opengl32.dll")  .as_ptr());
            
                    // gl::load_with(|s| GetProcAddress(module,
                    //         s.as_ptr() as *const i8) as *const c_void);
            
                    gl::Viewport::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::Viewport::is_loaded() {
                        gl::Viewport(0, 0, window_width, window_height);
                    } else {
                        panic!("gl::Viewport was not loaded")
                    }
            
                    gl::ClearColor::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::ClearColor::is_loaded() {
                        gl::ClearColor(0.12109375f32, 0.12109375f32, 0.12109375f32, 1.0f32);
                    } else {
                        panic!("gl::ClearColor was not loaded")
                    }
            
                    gl::GetError::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    let error_check_value: GLenum = gl::GetError();
            
                    /*
                    gl::CreateShader::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    let mut vertex_shader_id = 0u32;
                    if gl::CreateShader::is_loaded() {
                        vertex_shader_id = gl::CreateShader(gl::VERTEX_SHADER);
                    } else {
                        panic!("gl::CreateShader was not loaded")
                    }
                    */
            
                    /*
                    let c_str = std::ffi::CString::new(VS_SRC.as_bytes()).unwrap();
                    gl::ShaderSource::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::ShaderSource::is_loaded() {
                        gl::ShaderSource(vertex_shader_id, 1, &c_str.as_ptr(), std::ptr::null_mut());
                    } else {
                        // panic!("gl::ShaderSource was not loaded")
                    }
                    gl::CompileShader::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::CompileShader::is_loaded() {
                        gl::CompileShader(vertex_shader_id);
                    } else {
                        // panic!("gl::CompileShader was not loaded")
                    }
                    let mut vertex_array_id: GLuint = 0u32;
                    gl::GenVertexArrays::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::GenVertexArrays::is_loaded() {
                        gl::GenVertexArrays(1, &mut vertex_array_id as *mut u32);
                    } else {
                        panic!("gl::GenVertexArrays was not loaded")
                    }
                    */
            
                    gl::Clear::load_with(|s| GetProcAddress(module,
                            s.as_ptr() as *const i8) as *const c_void);
                    if gl::Clear::is_loaded() {
                        gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT |     gl::STENCIL_BUFFER_BIT);
                    } else {
                        panic!("gl::Clear was not loaded")
                    }
                    winapi::um::wingdi::SwapBuffers(h_dc);
                }
            }
            
            fn main()
            {
              unsafe
              {
                let class_name = to_wstring("OpenGL");
            
                let h_instance = winapi::um::libloaderapi::GetModuleHandleW(std::ptr::null_mut());
                let wnd = WNDCLASSW {
                    style: 0,
                    lpfnWndProc: Some(window_proc),
                    cbClsExtra: 0,
                    cbWndExtra: 0,
                    hInstance: h_instance,
                    hIcon: winapi::um::winuser::LoadIconW(0 as HINSTANCE,
                                                          winapi::um::winuser::IDI_APPLICATION),
                    hCursor: winapi::um::winuser::LoadCursorW(0 as HINSTANCE,
                                                              winapi::um::winuser::IDI_APPLICATION),
                    hbrBackground: 16 as HBRUSH,
                    lpszMenuName: 0 as LPCWSTR,
                    lpszClassName: class_name.as_ptr(),
                };
            
                winapi::um::winuser::RegisterClassW(&wnd);
            
                let window_width = 640;
                let window_height = 480;
                let h_wnd_window = winapi::um::winuser::CreateWindowExW(0, class_name.as_ptr(),
                                   to_wstring("OpenGL Example").as_ptr(), WS_OVERLAPPEDWINDOW |     WS_VISIBLE,
                                   0, 0, window_width, window_height, 0 as HWND, 0 as HMENU,    h_instance,
                                   std::ptr::null_mut());
            
                let mut msg = winapi::um::winuser::MSG {
                    hwnd : 0 as HWND,
                    message : 0 as UINT,
                    wParam : 0 as WPARAM,
                    lParam : 0 as LPARAM,
                    time : 0 as DWORD,
                    pt : winapi::shared::windef::POINT { x: 0, y: 0, },
                };
            
                let h_dc = winapi::um::winuser::GetDC(h_wnd_window);
                let pfd = winapi::um::wingdi::PIXELFORMATDESCRIPTOR {
                    nSize: std::mem::size_of::() as u16,
                    nVersion: 1,
                    dwFlags: winapi::um::wingdi::PFD_DRAW_TO_WINDOW
                            | winapi::um::wingdi::PFD_SUPPORT_OPENGL |  winapi::um::wingdi::PFD_DOUBLEBUFFER,
                    iPixelType: winapi::um::wingdi::PFD_TYPE_RGBA,
                    cColorBits: 64,
                    cRedBits: 0,
                    cRedShift: 0,
                    cGreenBits: 0,
                    cGreenShift: 0,
                    cBlueBits: 0,
                    cBlueShift: 0,
                    cAlphaBits: 0,
                    cAlphaShift: 0,
                    cAccumBits: 0,
                    cAccumRedBits: 0,
                    cAccumGreenBits: 0,
                    cAccumBlueBits: 0,
                    cAccumAlphaBits: 0,
                    cDepthBits: 32,
                    cStencilBits: 8,
                    cAuxBuffers: 0,
                    iLayerType: winapi::um::wingdi::PFD_MAIN_PLANE,
                    bReserved: 0,
                    dwLayerMask: 0,
                    dwVisibleMask: 0,
                    dwDamageMask: 0,
                };
            
                let pixel_format = winapi::um::wingdi::ChoosePixelFormat(h_dc,
                        &pfd as *const winapi::um::wingdi::PIXELFORMATDESCRIPTOR);
                winapi::um::wingdi::SetPixelFormat(h_dc, pixel_format,
                        &pfd as *const winapi::um::wingdi::PIXELFORMATDESCRIPTOR);
                let h_rc = winapi::um::wingdi::wglCreateContext(h_dc);
                winapi::um::wingdi::wglMakeCurrent(h_dc, h_rc);
                winapi::um::winuser::ShowWindow(h_wnd_window, winapi::um::winuser::SW_SHOW);
            
                loop
                {
                    if winapi::um::winuser::PeekMessageW(&mut msg, 0u32 as HWND, 0u32, 0u32,
                                                         winapi::um::winuser::PM_REMOVE) > 0i32 {
                        if msg.message == winapi::um::winuser::WM_QUIT {
                            break;
                        } else {
                            winapi::um::winuser::TranslateMessage(&mut msg);
                            winapi::um::winuser::DispatchMessageW(&mut msg);
                        }
            
                    } else {
                        draw_gl_scene(window_width, window_height, h_dc);
                    }
                }
              }
            }
            
            ...

            ANSWER

            Answered 2018-Feb-28 at 16:40

            Read the wiki and this too about loading OGL pointers.

            Briefly, for Windows:

            • GetProcAddress is only valid for OpenGL <= 1.1
            • wglGetProcAddress is only valid for OpenGL > 1.1

            Also, the use of shaders requires OpenGL >= 2.0. Better go with OGL >= 3.2 Core Profile. For this context:

            • You need a proper context for OpenGL >= 3.0, which is created with the use of wglCreateContextAttribsARB.
            • You need a valid and current context to get the pointer to wglCreateContextAttribsARB itself by using wglGetProcAddress.
            • This context may be temporary. It can be created with wglCreateContext. You can delete it after you got that pointer; and the create the "real" context.

            .

            Source https://stackoverflow.com/questions/49021466

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install gl-rs

            You can download it from GitHub.
            Rust is installed and managed by the rustup tool. Rust has a 6-week rapid release process and supports a great number of platforms, so there are many builds of Rust available at any time. Please refer rust-lang.org for more information.

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/brendanzab/gl-rs.git

          • CLI

            gh repo clone brendanzab/gl-rs

          • sshUrl

            git@github.com:brendanzab/gl-rs.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link