Merge pull request #113 from asajeffrey/gl-nonzero-default-framebuffer
Allow a non-zero default framebuffer
This commit is contained in:
commit
29cedb96ef
|
@ -112,7 +112,7 @@ impl<W> DemoApp<W> where W: Window {
|
||||||
pub fn new(window: W, window_size: WindowSize) -> DemoApp<W> {
|
pub fn new(window: W, window_size: WindowSize) -> DemoApp<W> {
|
||||||
let expire_message_event_id = window.create_user_event_id();
|
let expire_message_event_id = window.create_user_event_id();
|
||||||
|
|
||||||
let device = GLDevice::new(window.gl_version());
|
let device = GLDevice::new(window.gl_version(), window.gl_default_framebuffer());
|
||||||
let resources = window.resource_loader();
|
let resources = window.resource_loader();
|
||||||
let options = Options::get();
|
let options = Options::get();
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
//! A minimal cross-platform windowing layer.
|
//! A minimal cross-platform windowing layer.
|
||||||
|
|
||||||
|
use gl::types::GLuint;
|
||||||
use pathfinder_geometry::basic::point::Point2DI32;
|
use pathfinder_geometry::basic::point::Point2DI32;
|
||||||
use pathfinder_geometry::distortion::BarrelDistortionCoefficients;
|
use pathfinder_geometry::distortion::BarrelDistortionCoefficients;
|
||||||
use pathfinder_gl::GLVersion;
|
use pathfinder_gl::GLVersion;
|
||||||
|
@ -18,6 +19,7 @@ use std::path::PathBuf;
|
||||||
|
|
||||||
pub trait Window {
|
pub trait Window {
|
||||||
fn gl_version(&self) -> GLVersion;
|
fn gl_version(&self) -> GLVersion;
|
||||||
|
fn gl_default_framebuffer(&self) -> GLuint { 0 }
|
||||||
fn mouse_position(&self) -> Point2DI32;
|
fn mouse_position(&self) -> Point2DI32;
|
||||||
fn present(&self);
|
fn present(&self);
|
||||||
fn resource_loader(&self) -> &dyn ResourceLoader;
|
fn resource_loader(&self) -> &dyn ResourceLoader;
|
||||||
|
|
|
@ -24,15 +24,18 @@ use std::mem;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::str;
|
use std::str;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
pub struct GLDevice {
|
pub struct GLDevice {
|
||||||
version: GLVersion,
|
version: GLVersion,
|
||||||
|
default_framebuffer: GLuint,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GLDevice {
|
impl GLDevice {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new(version: GLVersion) -> GLDevice {
|
pub fn new(version: GLVersion, default_framebuffer: GLuint) -> GLDevice {
|
||||||
GLDevice { version }
|
GLDevice {
|
||||||
|
version,
|
||||||
|
default_framebuffer,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_texture_parameters(&self, texture: &GLTexture) {
|
fn set_texture_parameters(&self, texture: &GLTexture) {
|
||||||
|
@ -460,7 +463,7 @@ impl Device for GLDevice {
|
||||||
fn read_pixels_from_default_framebuffer(&self, size: Point2DI32) -> Vec<u8> {
|
fn read_pixels_from_default_framebuffer(&self, size: Point2DI32) -> Vec<u8> {
|
||||||
let mut pixels = vec![0; size.x() as usize * size.y() as usize * 4];
|
let mut pixels = vec![0; size.x() as usize * size.y() as usize * 4];
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::BindFramebuffer(gl::FRAMEBUFFER, 0); ck();
|
gl::BindFramebuffer(gl::FRAMEBUFFER, self.default_framebuffer); ck();
|
||||||
gl::ReadPixels(0,
|
gl::ReadPixels(0,
|
||||||
0,
|
0,
|
||||||
size.x() as GLsizei,
|
size.x() as GLsizei,
|
||||||
|
@ -599,7 +602,7 @@ impl Device for GLDevice {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn bind_default_framebuffer(&self, viewport: RectI32) {
|
fn bind_default_framebuffer(&self, viewport: RectI32) {
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::BindFramebuffer(gl::FRAMEBUFFER, 0); ck();
|
gl::BindFramebuffer(gl::FRAMEBUFFER, self.default_framebuffer); ck();
|
||||||
gl::Viewport(viewport.origin().x(),
|
gl::Viewport(viewport.origin().x(),
|
||||||
viewport.origin().y(),
|
viewport.origin().y(),
|
||||||
viewport.size().x(),
|
viewport.size().x(),
|
||||||
|
|
Loading…
Reference in New Issue