Skip to content

Commit bee6c41

Browse files
committed
fix(resolve): avoid removing enums needed by extensions
Core removes some enums, but some extensions need them, e.g. GL_VERTEX_ARRAY is required by GL_KHR_debug. Signed-off-by: Steven Noonan <steven@uplinklabs.net>
1 parent 64081f8 commit bee6c41

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

src/resolve.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ fn resolve_feature_set(
315315
}
316316
req_types.extend(require.types.iter().cloned());
317317
req_enums.extend(require.enums.iter().cloned());
318+
for e in &require.enums {
319+
removed_enums.remove(e.as_str());
320+
}
318321
for cmd in &require.commands {
319322
// Core commands already in req_commands stay there.
320323
if !req_commands.contains_key(cmd.as_str()) {

tests/generate_c.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,8 @@ fn generated_header_does_not_contain_removed_compat_enums_in_core() {
352352
.args([
353353
"--api",
354354
"gl:core=3.3",
355+
"--extensions",
356+
"",
355357
"--out-path",
356358
dir.path().to_str().unwrap(),
357359
"c",
@@ -368,3 +370,31 @@ fn generated_header_does_not_contain_removed_compat_enums_in_core() {
368370
"GL_QUADS should be absent in core profile"
369371
);
370372
}
373+
374+
#[test]
375+
fn removed_enums_readded_by_extensions() {
376+
// In core profile, deprecated constants like GL_QUADS get removed, *except* when they're
377+
// required by extensions.
378+
let dir = TempDir::new().unwrap();
379+
gloam()
380+
.args([
381+
"--api",
382+
"gl:core=3.3",
383+
"--extensions",
384+
"GL_ARB_tessellation_shader",
385+
"--out-path",
386+
dir.path().to_str().unwrap(),
387+
"c",
388+
])
389+
.assert()
390+
.success();
391+
392+
let header =
393+
std::fs::read_to_string(dir.path().join("include").join("gloam").join("gl.h")).unwrap();
394+
395+
// GL_QUADS is removed in core profile — it must not appear.
396+
assert!(
397+
header.contains("GL_QUADS "),
398+
"GL_QUADS should be in core profile with GL_ARB_tessellation_shader"
399+
);
400+
}

0 commit comments

Comments
 (0)