build: featurize renderer options
This commit is contained in:
parent
a345f21b35
commit
7ce6f23419
2 changed files with 73 additions and 37 deletions
|
@ -123,36 +123,40 @@ option(
|
|||
option(
|
||||
'r_default',
|
||||
type : 'combo',
|
||||
choices : ['gl33', 'gles20', 'gles30', 'null'],
|
||||
choices : ['auto', 'gl33', 'gles20', 'gles30', 'null'],
|
||||
description : 'Which rendering backend to use by default'
|
||||
)
|
||||
|
||||
option(
|
||||
'r_gl33',
|
||||
type : 'boolean',
|
||||
value : true,
|
||||
type : 'feature',
|
||||
value : 'auto',
|
||||
deprecated : {'true' : 'enabled', 'false' : 'disabled'},
|
||||
description : 'Build the OpenGL 3.3 Core renderer'
|
||||
)
|
||||
|
||||
option(
|
||||
'r_gles20',
|
||||
type : 'boolean',
|
||||
value : false,
|
||||
type : 'feature',
|
||||
value : 'disabled',
|
||||
deprecated : {'true' : 'enabled', 'false' : 'disabled'},
|
||||
description : 'Build the OpenGL ES 2.0 renderer (incomplete)'
|
||||
)
|
||||
|
||||
option(
|
||||
'r_gles30',
|
||||
type : 'boolean',
|
||||
value : false,
|
||||
type : 'feature',
|
||||
value : 'auto',
|
||||
deprecated : {'true' : 'enabled', 'false' : 'disabled'},
|
||||
description : 'Build the OpenGL ES 3.0 renderer'
|
||||
)
|
||||
|
||||
option(
|
||||
'r_null',
|
||||
type : 'boolean',
|
||||
value : true,
|
||||
description : 'Build the no-op renderer (nothing is displayed)'
|
||||
type : 'feature',
|
||||
value : 'auto',
|
||||
deprecated : {'true' : 'enabled', 'false' : 'disabled'},
|
||||
description : 'Build the no-op renderer (nothing is displayed). Required for --verify-replay to work properly'
|
||||
)
|
||||
|
||||
option(
|
||||
|
|
|
@ -1,3 +1,43 @@
|
|||
|
||||
subdir('common')
|
||||
|
||||
renderer_opts = {
|
||||
'gl33' : get_option('r_gl33').require(
|
||||
host_machine.system() not in ['nx', 'emscripten'],
|
||||
error_message : 'OpenGL 3.3 is not supported on this platform'),
|
||||
'gles20' : get_option('r_gles20').disable_auto_if(not shader_transpiler_enabled),
|
||||
'gles30' : get_option('r_gles30').disable_auto_if(
|
||||
not (shader_transpiler_enabled or transpile_glsl)),
|
||||
'null' : get_option('r_null'),
|
||||
}
|
||||
|
||||
default_renderer = get_option('r_default')
|
||||
renderers_prio = ['gl33', 'gles30', 'gles20']
|
||||
|
||||
if default_renderer == 'auto'
|
||||
foreach renderer : renderers_prio
|
||||
if renderer_opts[renderer].allowed()
|
||||
default_renderer = renderer
|
||||
break
|
||||
endif
|
||||
endforeach
|
||||
|
||||
if default_renderer == 'auto'
|
||||
renderers_prio_opts = []
|
||||
foreach renderer : renderers_prio
|
||||
renderers_prio_opts + f'r_@renderer@'
|
||||
endforeach
|
||||
renderers_prio_opts = ', '.join(renderers_prio_opts)
|
||||
|
||||
error('Could not pick a default renderer. ' +
|
||||
f'Make sure you have at least one of @renderers_prio_opts@ enabled, ' +
|
||||
'or force r_default=null if you really mean it.')
|
||||
endif
|
||||
endif
|
||||
|
||||
assert(renderer_opts[default_renderer].allowed(),
|
||||
f'Default renderer @default_renderer@ is not enabled')
|
||||
|
||||
modules = [
|
||||
'gl33',
|
||||
'gles20',
|
||||
|
@ -5,18 +45,10 @@ modules = [
|
|||
'null',
|
||||
]
|
||||
|
||||
if ['nx', 'emscripten'].contains(host_machine.system())
|
||||
forced_renderer = 'gles30'
|
||||
else
|
||||
forced_renderer = ''
|
||||
endif
|
||||
|
||||
default_renderer = (forced_renderer == '') ? get_option('r_default') : forced_renderer
|
||||
static_gles30 = (host_machine.system() == 'emscripten')
|
||||
|
||||
if forced_renderer == '' and not get_option('r_@0@'.format(default_renderer))
|
||||
error('Default renderer \'@0@\' is not enabled. Enable it with -Dr_@0@=true, or set r_default to something else.'.format(default_renderer))
|
||||
endif
|
||||
static_gles30 = (
|
||||
renderer_opts['gles30'].allowed() and
|
||||
host_machine.system() == 'emscripten'
|
||||
)
|
||||
|
||||
renderer_src = files(
|
||||
'api.c',
|
||||
|
@ -27,7 +59,6 @@ enabled_renderers = []
|
|||
|
||||
# NOTE: Order matters here.
|
||||
subdir('null')
|
||||
subdir('common')
|
||||
subdir('glcommon')
|
||||
subdir('gl33')
|
||||
subdir('glescommon')
|
||||
|
@ -38,15 +69,14 @@ included_deps = []
|
|||
needed_deps = ['common']
|
||||
r_macro = []
|
||||
|
||||
foreach m : modules
|
||||
should_include = (forced_renderer == '') ? get_option('r_@0@'.format(m)) : (m == forced_renderer)
|
||||
if should_include
|
||||
renderer_src += get_variable('r_@0@_src'.format(m))
|
||||
r_macro += ['R(@0@)'.format(m)]
|
||||
enabled_renderers += [m]
|
||||
needed_deps += get_variable('r_@0@_deps'.format(m))
|
||||
included_deps += [m]
|
||||
renderer_deps += get_variable('r_@0@_libdeps'.format(m))
|
||||
foreach renderer, ropt : renderer_opts
|
||||
if ropt.allowed()
|
||||
renderer_src += get_variable(f'r_@renderer@_src')
|
||||
r_macro += f'R(@renderer@)'
|
||||
enabled_renderers += renderer
|
||||
needed_deps += get_variable(f'r_@renderer@_deps')
|
||||
included_deps += renderer
|
||||
renderer_deps += get_variable(f'r_@renderer@_libdeps')
|
||||
endif
|
||||
endforeach
|
||||
|
||||
|
@ -62,9 +92,11 @@ r_macro = ' '.join(r_macro)
|
|||
config.set('TAISEI_BUILDCONF_RENDERER_BACKENDS', r_macro)
|
||||
config.set_quoted('TAISEI_BUILDCONF_RENDERER_DEFAULT', default_renderer)
|
||||
|
||||
if angle_enabled
|
||||
assert(
|
||||
enabled_renderers.contains('gles30') or enabled_renderers.contains('gles20'),
|
||||
'An OpenGL ES renderer is required to use ANGLE. Enable r_gles30 or r_gles20, or disable install_angle.'
|
||||
)
|
||||
have_gles_renderer = (
|
||||
renderer_opts['gles30'].allowed() or
|
||||
renderer_opts['gles20'].allowed())
|
||||
|
||||
if angle_enabled and not have_gles_renderer
|
||||
error('An OpenGL ES renderer is required to use ANGLE. ' +
|
||||
'Enable r_gles30 or r_gles20, or disable install_angle.')
|
||||
endif
|
||||
|
|
Loading…
Reference in a new issue