Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Squashed] 0.23 Api Changes #1239

Merged
merged 106 commits into from
Feb 1, 2020
Merged
Changes from 1 commit
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
47a0188
Squashed commit of the following:
goddessfreya Nov 21, 2019
dd7398e
Fixes
goddessfreya Nov 21, 2019
e795eed
Misc
goddessfreya Nov 21, 2019
1615718
Minor changes + rustfmt
goddessfreya Nov 21, 2019
03abfb1
Misc.
goddessfreya Nov 21, 2019
03fb9ee
2 hours of work.
goddessfreya Nov 28, 2019
cfd93b7
Changes, wayland almost works... again!
goddessfreya Dec 3, 2019
c7fb965
Wayland up and flying (multiple day's work)
goddessfreya Dec 13, 2019
236616f
Struct variants.
goddessfreya Dec 13, 2019
24fe143
X11 basics
goddessfreya Dec 14, 2019
2617faf
Misc changes
goddessfreya Dec 14, 2019
5d78420
Changes
goddessfreya Dec 17, 2019
9199b52
Cargo fmt and other
goddessfreya Dec 17, 2019
56269a6
More x11 from last couple days.
goddessfreya Dec 24, 2019
f46a29b
Unnecessary
goddessfreya Dec 24, 2019
9d8b594
Improve common issues readme. (#1248)
goddessfreya Dec 12, 2019
2ee7304
Merge remote-tracking branch 'upstream/master' into 0.23maj
goddessfreya Dec 24, 2019
2e0eae5
Progress...
goddessfreya Dec 28, 2019
4e08ac0
Copy paste
goddessfreya Dec 28, 2019
881f221
Changes for the night
goddessfreya Dec 28, 2019
b7bfefa
More x11 changes.
goddessfreya Dec 29, 2019
04497bb
Minor refactor.
goddessfreya Dec 29, 2019
4b464e4
Push for reject your reality.
goddessfreya Dec 29, 2019
2150e66
Config vec part 1
goddessfreya Dec 31, 2019
789d155
Config vec p2
goddessfreya Dec 31, 2019
08cdf68
Vec config part 3
goddessfreya Dec 31, 2019
dbbedf3
Srgb and flush support with egl.
goddessfreya Dec 31, 2019
7bb3860
GLX p1
goddessfreya Jan 1, 2020
f23042b
Api changes.
goddessfreya Jan 2, 2020
67bc14f
Error handling improvements
goddessfreya Jan 2, 2020
f845de0
Remove comment
goddessfreya Jan 2, 2020
3f8e777
Merge glutin-old back in
goddessfreya Jan 2, 2020
6d49596
Ossi's suggestion of removing display.
goddessfreya Jan 5, 2020
0a5fde2
Final API changes by me. Some docs.
goddessfreya Jan 5, 2020
a59ad1b
Fixes.
goddessfreya Jan 5, 2020
7c6862b
Prepare for takeoff
goddessfreya Jan 5, 2020
4a618c0
Update.
goddessfreya Jan 12, 2020
377757c
Switch to github actions. (#1258)
goddessfreya Jan 5, 2020
d352f73
Update publish.yml (#1259)
goddessfreya Jan 5, 2020
215a686
Update publish.yml
goddessfreya Jan 5, 2020
c7def58
Update publish.yml
goddessfreya Jan 5, 2020
1af0bcd
New release of glutin. (#1261)
goddessfreya Jan 7, 2020
89961ae
Bad cherrypicking.
goddessfreya Jan 12, 2020
ca27339
Docs and shit p1
goddessfreya Jan 13, 2020
96623a5
Native api
goddessfreya Jan 13, 2020
43a0559
Config docs p2
goddessfreya Jan 13, 2020
7a81a0a
FIXMEs so I can grep the source for them latter
goddessfreya Jan 13, 2020
1168e6c
Docs and inling
goddessfreya Jan 14, 2020
fd20019
More docs and whatnot
goddessfreya Jan 15, 2020
969ff19
Docs and spelling
goddessfreya Jan 15, 2020
8a9c585
Changes for the night
goddessfreya Jan 16, 2020
81b27fe
Merge remote-tracking branch 'upstream/master' into 0.23maj
goddessfreya Jan 16, 2020
2cfa6fe
Merge remote-tracking branch 'upstream/master' into 0.23maj
goddessfreya Jan 16, 2020
e31df41
Fix
goddessfreya Jan 16, 2020
477c95e
More docs.
goddessfreya Jan 18, 2020
602da61
OsMesa docs
goddessfreya Jan 18, 2020
558c4d5
One example
goddessfreya Jan 18, 2020
5db3b06
The remaining examples
goddessfreya Jan 19, 2020
c62b61d
Docs
goddessfreya Jan 19, 2020
353937c
Fixes and add example
goddessfreya Jan 19, 2020
5daf2bf
Temp CI
goddessfreya Jan 21, 2020
21e186a
Plz work
goddessfreya Jan 21, 2020
970cdc1
CI how about now?
goddessfreya Jan 21, 2020
f8660c6
Ciiiiiiii!
goddessfreya Jan 21, 2020
bd6d07e
Shuffling but no compile
goddessfreya Jan 22, 2020
ba2b612
Glx marches ever so complete
goddessfreya Jan 23, 2020
244fa95
Getting close
goddessfreya Jan 24, 2020
bc7857a
make_current_rw and more glx.
goddessfreya Jan 24, 2020
7fa95f2
Finish up glx
goddessfreya Jan 26, 2020
85977f1
serde
goddessfreya Jan 26, 2020
26bf90c
Merge remote-tracking branch 'upstream/master' into 0.23maj + docs
goddessfreya Jan 26, 2020
19ba8b8
Bump
goddessfreya Jan 26, 2020
5d4fff7
Fix
goddessfreya Jan 26, 2020
21a1006
Prepare for gbm support
goddessfreya Jan 26, 2020
b438968
Fix bugs
goddessfreya Jan 26, 2020
8985596
fmt
goddessfreya Jan 26, 2020
c8cc88c
Rm debug line
goddessfreya Jan 27, 2020
5060239
Oooops
goddessfreya Jan 27, 2020
52e62c3
EGLMesaSurfaceless
goddessfreya Jan 27, 2020
3ffc956
Gbm support and a example with broken vsync
goddessfreya Jan 29, 2020
4ec2ec9
Fixes.
goddessfreya Jan 29, 2020
4dcf94f
Fixed with help of folks at #dri-devel
goddessfreya Jan 29, 2020
78991cb
Examples fixed
goddessfreya Jan 29, 2020
33098ac
Merge remote-tracking branch 'upstream/master' into 0.23maj
goddessfreya Jan 29, 2020
d6b4af3
EGLDevice
goddessfreya Jan 30, 2020
3f0289b
fmt
goddessfreya Jan 30, 2020
01e6db2
ci
goddessfreya Jan 30, 2020
b138437
ci 2
goddessfreya Jan 30, 2020
900960a
Largest
goddessfreya Jan 30, 2020
84697e6
Make current rw example based on sharing example
goddessfreya Jan 30, 2020
e3c0540
TODO
goddessfreya Jan 30, 2020
a4458f2
DRM ci
goddessfreya Jan 30, 2020
f48c387
CI now?
goddessfreya Jan 30, 2020
201b3f4
Fix
goddessfreya Jan 31, 2020
6ddf31a
Doc, one word.
goddessfreya Jan 31, 2020
37a31ee
Prepare for #dri-devel
goddessfreya Jan 31, 2020
d0a4957
Rework EGL to use eglGetConfigs as suggested by #dri-devel
goddessfreya Jan 31, 2020
c3a1a92
Similiar rework for glx.
goddessfreya Jan 31, 2020
92182cf
Doc updates.
goddessfreya Jan 31, 2020
e7f1c94
Pixmaps, x11
goddessfreya Feb 1, 2020
1d4e513
Doc
goddessfreya Feb 1, 2020
b9f4aa4
Clippy
goddessfreya Feb 1, 2020
621f6bf
CLippy derp
goddessfreya Feb 1, 2020
ec602ce
Clippy examples
goddessfreya Feb 1, 2020
a3aeb81
Merge remote-tracking branch 'upstream/master' into 0.23maj
goddessfreya Feb 1, 2020
3f82a51
Changelog
goddessfreya Feb 1, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Getting close
Signed-off-by: Freya Gentz <zegentzy@protonmail.com>
goddessfreya committed Jan 24, 2020

Verified

This commit was created on github.com and signed with GitHub’s verified signature.
commit 244fa9573c9cab135d862f81f3e18f59d6c608ab
2 changes: 2 additions & 0 deletions TODO
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
pixmap examples
new_existing examples
GLX_LARGEST_PBUFFER
AUDIT flush behaviour
Test srgb and flush w/ egl
137 changes: 70 additions & 67 deletions src/api/egl.rs
Original file line number Diff line number Diff line change
@@ -416,7 +416,6 @@ macro_rules! attrib {
pub struct Config {
display: Arc<Display>,
config_id: ffi::EGLConfig,
version: (Api, Version),
}

unsafe impl Send for Config {}
@@ -446,9 +445,7 @@ impl Config {
}

if cf.float_color_buffer == Some(true) {
errors.append(make_error!(ErrorType::NotSupported(
"Float color buffers not supported with EGL.".to_string()
)));
errors.append(make_error!(ErrorType::FloatingPointSurfaceNotSupported));
return Err(errors);
}

@@ -465,6 +462,7 @@ impl Config {
.is_some()
{
errors.append(make_error!(ErrorType::AdaptiveSwapControlNotSupported));
errors.append(make_error!(ErrorType::SwapControlRangeNotSupported));
return Err(errors);
}

@@ -492,6 +490,7 @@ impl Config {
match cf.version {
(Api::OpenGlEs, Version(3, _)) => {
if display.egl_version < (1, 3) {
errors.append(make_error!(ErrorType::OpenGlVersionNotSupported));
return Err(errors);
}
out.push(ffi::egl::RENDERABLE_TYPE as raw::c_int);
@@ -501,6 +500,7 @@ impl Config {
}
(Api::OpenGlEs, Version(2, _)) => {
if display.egl_version < (1, 3) {
errors.append(make_error!(ErrorType::OpenGlVersionNotSupported));
return Err(errors);
}
out.push(ffi::egl::RENDERABLE_TYPE as raw::c_int);
@@ -519,6 +519,7 @@ impl Config {
(Api::OpenGlEs, _) => unimplemented!(),
(Api::OpenGl, _) => {
if display.egl_version < (1, 3) {
errors.append(make_error!(ErrorType::OpenGlVersionNotSupported));
return Err(errors);
}
out.push(ffi::egl::RENDERABLE_TYPE as raw::c_int);
@@ -562,10 +563,6 @@ impl Config {
out.push(stencil as raw::c_int);
}

if let Some(true) = cf.double_buffer {
return Err(errors);
}

if let Some(multisampling) = cf.multisampling {
out.push(ffi::egl::SAMPLES as raw::c_int);
out.push(multisampling as raw::c_int);
@@ -582,6 +579,7 @@ impl Config {

if let Some(srgb) = cf.srgb {
if srgb && !display.has_extension("EGL_KHR_gl_colorspace") {
errors.append(make_error!(ErrorType::SrgbSurfaceNotSupported));
return Err(errors);
}
}
@@ -660,10 +658,7 @@ impl Config {
return None;
}
Ok(min) if (dsir.start as i32) < min => {
errors.append(make_oserror!(OsError::Misc(format!(
"Desired swap interval range start ({:?}) smaller than minimum ({:?}) for {:?}",
dsir.start, min, conf
))));
errors.append(make_error!(ErrorType::SwapControlRangeNotSupported));
return None;
}
_ => (),
@@ -677,10 +672,7 @@ impl Config {
return None;
}
Ok(max) if (dsir.end as i32) > (max + 1) => {
errors.append(make_oserror!(OsError::Misc(format!(
"Desired swap interval range end ({:?}) bigger than maximum ({:?}) for {:?}",
dsir.end, max, conf
))));
errors.append(make_error!(ErrorType::SwapControlRangeNotSupported));
return None;
}
_ => (),
@@ -700,7 +692,7 @@ impl Config {
.filter_map(|conf| match conf {
Err(err) => {
errors.append(err);
return None;
None
}
Ok(conf) => Some(conf),
})
@@ -744,13 +736,14 @@ impl Config {
alpha_bits: attrib!(egl, display, conf, ffi::egl::ALPHA_SIZE)? as u8,
depth_bits: attrib!(egl, display, conf, ffi::egl::DEPTH_SIZE)? as u8,
stencil_bits: attrib!(egl, display, conf, ffi::egl::STENCIL_SIZE)? as u8,
float_color_buffer: false,
stereoscopy: false,
double_buffer: true,
multisampling: match attrib!(egl, display, conf, ffi::egl::SAMPLES)? {
0 | 1 => None,
a => Some(a as u16),
},
srgb: cf.srgb.unwrap_or(false),
double_buffer: cf.double_buffer.unwrap_or(true),
swap_interval_ranges,
};

@@ -759,36 +752,51 @@ impl Config {
// FIXME: Pleasing borrowck. Lokathor demands unrolling this loop.
.collect::<Vec<_>>()
.into_iter()
.filter_map(|conf| match conf {
Err(err) => {
.filter_map(|conf| {
if let Err(err) = conf {
errors.append(err);
return None;
}
Ok(conf) => Some(conf),
let (attribs, conf) = conf.unwrap();

let mut confs = vec![
(attribs, conf),
];

if cf.srgb.is_none() {
let mut attribs = attribs.clone();
attribs.srgb = true;
confs.push((attribs, conf));
}

if cf.double_buffer.is_none() {
let mut attribs = attribs.clone();
attribs.double_buffer = false;
confs.push((attribs, conf));
}

if cf.double_buffer.is_none() && cf.srgb.is_none() {
attribs.srgb = true;
attribs.double_buffer = false;
confs.push((attribs, conf));
}

Some(confs)
})
.flat_map(|conf| conf)
.collect();

if confs.is_empty() {
return Err(errors);
}

if cf.srgb.is_none() {
let confs_len = confs.len();
for i in 0..confs_len {
let mut new_conf = confs[i].clone();
new_conf.0.srgb = true;
confs.push(new_conf);
}
}

Ok(confs
.into_iter()
.map(|(attribs, config_id)| {
(
attribs,
Config {
display: Arc::clone(&display),
version: cf.version,
config_id,
},
)
@@ -813,13 +821,6 @@ unsafe impl Send for Context {}
unsafe impl Sync for Context {}

impl Context {
/// Start building an EGL context.
///
/// This function initializes some things and chooses the pixel format.
///
/// To finish the process, you must call `.finish(window)` on the
/// `ContextPrototype`.
///
#[inline]
pub(crate) fn new(
cb: ContextBuilderWrapper<&Context>,
@@ -1018,7 +1019,7 @@ impl Context {
let egl = EGL.as_ref().unwrap();

let ret = egl.MakeCurrent(**self.display, surf.surface, surf.surface, self.context);
Self::check_make_current(Some(ret))?;
Self::check_make_current(ret)?;

Ok(())
}
@@ -1033,25 +1034,21 @@ impl Context {
self.context,
);

Self::check_make_current(Some(ret))
Self::check_make_current(ret)
}

#[inline]
pub unsafe fn make_not_current(&self) -> Result<(), Error> {
let egl = EGL.as_ref().unwrap();

if egl.GetCurrentContext() == self.context {
let ret = egl.MakeCurrent(
**self.display,
ffi::egl::NO_SURFACE,
ffi::egl::NO_SURFACE,
ffi::egl::NO_CONTEXT,
);
let ret = egl.MakeCurrent(
**self.display,
ffi::egl::NO_SURFACE,
ffi::egl::NO_SURFACE,
ffi::egl::NO_CONTEXT,
);

Self::check_make_current(Some(ret))
} else {
Self::check_make_current(None)
}
Self::check_make_current(ret)
}

#[inline]
@@ -1067,7 +1064,7 @@ impl Context {

#[inline]
pub fn get_api(&self) -> Api {
self.config.config.version.0
self.config.attribs.version.0
}

// FIXME: Needed for android support.
@@ -1148,9 +1145,9 @@ impl Context {
}

#[inline]
unsafe fn check_make_current(ret: Option<u32>) -> Result<(), Error> {
unsafe fn check_make_current(ret: u32) -> Result<(), Error> {
let egl = EGL.as_ref().unwrap();
if ret == Some(0) {
if ret == 0 {
match egl.GetError() as u32 {
ffi::egl::CONTEXT_LOST => Err(make_error!(ErrorType::ContextLost)),
err => Err(make_oserror!(OsError::Misc(format!(
@@ -1217,6 +1214,18 @@ impl<T: SurfaceTypeTrait> Surface<T> {
}
}

if T::surface_type() == SurfaceType::Window {
out.push(ffi::egl::RENDER_BUFFER as raw::c_int);
match conf.attribs.double_buffer {
false => {
out.push(ffi::egl::SINGLE_BUFFER as raw::c_int);
}
true => {
out.push(ffi::egl::BACK_BUFFER as raw::c_int);
}
}
}

if let Some(size) = size {
let size: (u32, u32) = (*size).into();
out.push(ffi::egl::TEXTURE_FORMAT as raw::c_int);
@@ -1254,20 +1263,14 @@ impl<T: SurfaceTypeTrait> Surface<T> {
pub unsafe fn make_not_current(&self) -> Result<(), Error> {
let egl = EGL.as_ref().unwrap();

if egl.GetCurrentSurface(ffi::egl::DRAW as i32) == self.surface
|| egl.GetCurrentSurface(ffi::egl::READ as i32) == self.surface
{
let ret = egl.MakeCurrent(
**self.display,
ffi::egl::NO_SURFACE,
ffi::egl::NO_SURFACE,
ffi::egl::NO_CONTEXT,
);
let ret = egl.MakeCurrent(
**self.display,
ffi::egl::NO_SURFACE,
ffi::egl::NO_SURFACE,
ffi::egl::NO_CONTEXT,
);

Context::check_make_current(Some(ret))
} else {
Context::check_make_current(None)
}
Context::check_make_current(ret)
}
}

Loading