Graphics API selection

This commit is contained in:
Lubos Lenco 2017-01-31 20:15:58 +01:00
parent 19a218b44b
commit c188020451
6 changed files with 58 additions and 6 deletions

View file

@ -1,4 +1,4 @@
uniform float shirr[27];
uniform float shirr[28];
vec3 shIrradiance(const vec3 nor, const float scale) {
const float c1 = 0.429043;

View file

@ -159,9 +159,12 @@ def compile_project(target_name=None, is_publish=False, watch=False, patch=False
cmd.append('--ffmpeg')
cmd.append('"' + ffmpeg_path + '"')
if armutils.get_os() == 'win': # OpenGL for now
if armutils.get_os() == 'win':
cmd.append('-g')
cmd.append('opengl2')
if (target_name == '' or target_name == '--run') and wrd.arm_gapi_win == 'direct3d9':
cmd.append('direct3d9')
else:
cmd.append('opengl2')
if kha_target_name == 'krom':
if state.in_viewport:

View file

@ -1,5 +1,6 @@
import armutils
import subprocess
import bpy
def kode_studio():
sdk_path = armutils.get_sdk_path()
@ -25,3 +26,24 @@ def get_kha_target(target_name): # TODO: remove
if target_name == 'macos':
return 'osx'
return target_name
def runtime_to_gapi():
wrd = bpy.data.worlds['Arm']
if wrd.arm_play_runtime == 'Krom' or wrd.arm_play_runtime == 'Native':
return 'arm_gapi_' + armutils.get_os()
else:
return 'arm_gapi_html5'
def target_to_gapi():
# TODO: align target names
wrd = bpy.data.worlds['Arm']
if wrd.arm_project_target == 'krom':
return 'arm_gapi_' + armutils.get_os()
elif wrd.arm_project_target == 'macos':
return 'arm_gapi_mac'
elif wrd.arm_project_target == 'windows':
return 'arm_gapi_win'
elif wrd.arm_project_target == 'android-native':
return 'arm_gapi_android'
else:
return 'arm_gapi_' + wrd.arm_project_target

View file

@ -218,7 +218,7 @@ def make_forward_base(con_mesh, parse_opacity=False):
if '_Irr' in wrd.world_defs:
frag.add_include('../../Shaders/std/shirr.glsl')
frag.add_uniform('float shirr[27]', link='_envmapIrradiance', included=True)
frag.add_uniform('float shirr[28]', link='_envmapIrradiance', included=True)
if '_Rad' in wrd.world_defs:
frag.add_uniform('sampler2D senvmapRadiance', link='_envmapRadiance')
frag.add_uniform('sampler2D senvmapBrdf', link='_envmapBrdf')

View file

@ -45,7 +45,7 @@ def init_properties():
bpy.types.World.arm_recompile_trigger = bpy.props.BoolProperty(name="Recompile Trigger", description="Force upcoming recomilation", default=False)
bpy.types.World.arm_progress = bpy.props.FloatProperty(name="Progress", description="Current build progress", default=100.0, min=0.0, max=100.0, soft_min=0.0, soft_max=100.0, subtype='PERCENTAGE', get=log.get_progress)
bpy.types.World.arm_version = StringProperty(name="Version", description="Armory SDK version", default=arm_ver)
target_prop = EnumProperty(
bpy.types.World.arm_project_target = EnumProperty(
items = [('html5', 'HTML5', 'html5'),
('windows', 'Windows', 'windows'),
('macos', 'MacOS', 'macos'),
@ -54,7 +54,6 @@ def init_properties():
('android-native', 'Android', 'android-native'),
('krom', 'Krom', 'krom')],
name="Target", default='html5', description='Build paltform')
bpy.types.World.arm_project_target = target_prop
bpy.types.World.arm_project_name = StringProperty(name="Name", description="Exported project name", default="")
bpy.types.World.arm_project_package = StringProperty(name="Package", description="Package name for scripts", default="arm")
bpy.types.World.arm_play_active_scene = BoolProperty(name="Play Active Scene", description="Load currently edited scene when launching player", default=True)
@ -111,6 +110,32 @@ def init_properties():
('Krom', 'Krom', 'Krom')],
name="Runtime", description="Player runtime used when launching in new window", default='Krom', update=assets.invalidate_shader_cache)
bpy.types.World.arm_loadbar = BoolProperty(name="Load Bar", description="Show asset loading progress on published builds", default=True)
bpy.types.World.arm_gapi_win = EnumProperty(
items = [('opengl2', 'OpenGL', 'opengl2'),
('vulkan', 'Vulkan', 'vulkan'),
('direct3d9', 'Direct3D9', 'direct3d9'),
('direct3d11', 'Direct3D11', 'direct3d11'),
('direct3d12', 'Direct3D12', 'direct3d12')],
name="Graphics API", default='opengl2', description='Based on currently selected target')
bpy.types.World.arm_gapi_linux = EnumProperty(
items = [('opengl2', 'OpenGL', 'opengl2'),
('vulkan', 'Vulkan', 'vulkan')],
name="Graphics API", default='opengl2', description='Based on currently selected target')
bpy.types.World.arm_gapi_android = EnumProperty(
items = [('opengl2', 'OpenGL', 'opengl2'),
('vulkan', 'Vulkan', 'vulkan')],
name="Graphics API", default='opengl2', description='Based on currently selected target')
bpy.types.World.arm_gapi_mac = EnumProperty(
items = [('opengl2', 'OpenGL', 'opengl2'),
('metal', 'Metal', 'metal')],
name="Graphics API", default='opengl2', description='Based on currently selected target')
bpy.types.World.arm_gapi_ios = EnumProperty(
items = [('opengl2', 'OpenGL', 'opengl2'),
('metal', 'Metal', 'metal')],
name="Graphics API", default='opengl2', description='Based on currently selected target')
bpy.types.World.arm_gapi_html5 = EnumProperty(
items = [('webgl', 'WebGL', 'webgl')],
name="Graphics API", default='webgl', description='Based on currently selected target')
# For object
bpy.types.Object.instanced_children = bpy.props.BoolProperty(name="Instanced Children", description="Use instaced rendering", default=False, update=invalidate_mesh_cache)

View file

@ -376,6 +376,7 @@ class ArmoryPlayerPanel(bpy.types.Panel):
layout.prop(wrd, 'arm_play_advanced')
if wrd.arm_play_advanced:
layout.prop(wrd, make_utils.runtime_to_gapi())
layout.prop(wrd, 'arm_play_console')
if armutils.with_krom():
layout.prop(wrd, 'arm_play_live_patch')
@ -415,6 +416,7 @@ class ArmoryProjectPanel(bpy.types.Panel):
row.operator("arm.build_project")
row.operator("arm.publish_project")
layout.prop(wrd, 'arm_project_target')
layout.prop(wrd, make_utils.target_to_gapi())
layout.prop(wrd, 'arm_project_advanced')
if wrd.arm_project_advanced: