Allow graphics api selection for player

This commit is contained in:
luboslenco 2018-03-24 14:46:54 +01:00
parent 3645f68c7f
commit 068d207a50
4 changed files with 66 additions and 49 deletions

View file

@ -4,9 +4,9 @@ bl_info = {
"name": "Armory",
"category": "Render",
"location": "Properties -> Render -> Armory Player",
"description": "3D game engine for Blender",
"description": "3D Game Engine for Blender",
"author": "Armory3D.org",
"version": (11, 6, 0),
"version": (13, 0, 0),
"blender": (2, 79, 0),
"wiki_url": "http://armory3d.org/manual",
"tracker_url": "https://github.com/armory3d/armory/issues"
@ -19,12 +19,22 @@ import shutil
import webbrowser
import subprocess
import bpy
import platform
from bpy.types import Operator, AddonPreferences
from bpy.props import *
from bpy.app.handlers import persistent
with_krom = False
def get_os():
s = platform.system()
if s == 'Windows':
return 'win'
elif s == 'Darwin':
return 'mac'
else:
return 'linux'
class ArmoryAddonPreferences(AddonPreferences):
bl_idname = __name__
@ -49,10 +59,23 @@ class ArmoryAddonPreferences(AddonPreferences):
sdk_bundled = BoolProperty(name="Bundled SDK", default=True)
sdk_path = StringProperty(name="SDK Path", subtype="FILE_PATH", update=sdk_path_update, default="")
show_advanced = BoolProperty(name="Show Advanced", default=False)
player_gapi_win = EnumProperty(
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl'),
('direct3d11', 'Direct3D11', 'direct3d11')],
name="Player Graphics API", default='opengl', description='Use this graphics API when launching the game in Krom player(F5)')
player_gapi_linux = EnumProperty(
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl')],
name="Player Graphics API", default='opengl', description='Use this graphics API when launching the game in Krom player(F5)')
player_gapi_mac = EnumProperty(
items = [('opengl', 'Auto', 'opengl'),
('opengl', 'OpenGL', 'opengl')],
name="Player Graphics API", default='opengl', description='Use this graphics API when launching the game in Krom player(F5)')
renderdoc_path = StringProperty(name="RenderDoc Path", description="Binary path", subtype="FILE_PATH", update=renderdoc_path_update, default="")
ffmpeg_path = StringProperty(name="FFMPEG Path", description="Binary path", subtype="FILE_PATH", update=ffmpeg_path_update, default="")
save_on_build = BoolProperty(name="Save on Build", description="Save .blend", default=True)
legacy_shaders = BoolProperty(name="Legacy Shaders", default=False)
legacy_shaders = BoolProperty(name="Legacy Shaders", description="Attempt to compile shaders runnable on older hardware", default=False)
viewport_controls = EnumProperty(
items=[('qwerty', 'qwerty', 'qwerty'),
('azerty', 'azerty', 'azerty')],
@ -72,31 +95,23 @@ class ArmoryAddonPreferences(AddonPreferences):
layout.prop(self, "sdk_path")
layout.prop(self, "show_advanced")
if self.show_advanced:
layout.prop(self, "renderdoc_path")
layout.prop(self, "ffmpeg_path")
layout.prop(self, "viewport_controls")
layout.prop(self, "save_on_build")
layout.prop(self, "legacy_shaders")
box = layout.box().column()
box.prop(self, "player_gapi_" + get_os())
box.prop(self, "renderdoc_path")
box.prop(self, "ffmpeg_path")
box.prop(self, "viewport_controls")
box.prop(self, "save_on_build")
box.prop(self, "legacy_shaders")
layout.separator()
layout.label("Armory Updater")
layout.label("Note: Development version may run unstable!")
row = layout.row(align=True)
box = layout.box().column()
box.label("Armory Updater")
box.label("Note: Development version may run unstable!")
row = box.row(align=True)
row.alignment = 'EXPAND'
row.operator("arm_addon.install_git", icon="URL")
row.operator("arm_addon.update", icon="FILE_REFRESH")
row.operator("arm_addon.restore")
layout.label("Please restart Blender after successful SDK update.")
def get_os():
import platform
s = platform.system()
if s == 'Windows':
return 'win'
elif s == 'Darwin':
return 'mac'
else:
return 'linux'
box.label("Please restart Blender after successful SDK update.")
def get_sdk_path(context):
global with_krom

View file

@ -231,22 +231,16 @@ def compile_project(target_name=None, watch=False, patch=False, no_project_file=
cmd.append('--ffmpeg')
cmd.append(ffmpeg_path) # '"' + ffmpeg_path + '"'
if kha_target_name == 'krom':
if state.is_export:
state.export_gapi = arm.utils.get_gapi()
else:
state.export_gapi = 'opengl'
if state.in_viewport:
if arm.utils.glsl_version() >= 330:
cmd.append('--shaderversion')
cmd.append('330')
else:
cmd.append('--shaderversion')
cmd.append('110')
else:
state.export_gapi = arm.utils.get_gapi()
state.export_gapi = arm.utils.get_gapi()
cmd.append('-g')
cmd.append(state.export_gapi)
if state.in_viewport:
if arm.utils.glsl_version() >= 330:
cmd.append('--shaderversion')
cmd.append('330')
else:
cmd.append('--shaderversion')
cmd.append('110')
# Kha defaults to 110 on Linux
is_linux = arm.utils.get_os() == 'linux'
@ -530,11 +524,12 @@ def on_compiled(mode): # build, play, play_viewport, publish
html5_app_path = 'http://localhost:8040/' + arm.utils.build_dir() + '/debug/html5'
webbrowser.open(html5_app_path)
elif wrd.arm_play_runtime == 'Krom':
krom_location, krom_path = arm.utils.krom_paths()
bin_ext = '' if state.export_gapi == 'opengl' else '_' + state.export_gapi
krom_location, krom_path = arm.utils.krom_paths(bin_ext=bin_ext)
os.chdir(krom_location)
args = [krom_path, arm.utils.get_fp_build() + '/debug/krom', arm.utils.get_fp_build() + '/debug/krom-resources']
# TODO: Krom sound freezes on MacOS
if arm.utils.get_os() == 'mac':
if arm.utils.get_os() == 'mac': # TODO: Krom sound freezes on MacOS
args.append('--nosound')
if state.is_render:
args.append('--nowindow')

View file

@ -60,14 +60,14 @@ def get_os():
def get_gapi():
wrd = bpy.data.worlds['Arm']
if state.in_viewport:
return 'opengl'
if state.is_export:
item = wrd.arm_exporterlist[wrd.arm_exporterlist_index]
return getattr(item, target_to_gapi(item.arm_project_target))
else:
if wrd.arm_play_runtime == 'Browser':
return 'webgl'
else:
return 'opengl'
if wrd.arm_play_runtime == 'Browser':
return 'webgl'
return arm.utils.get_player_gapi()
def get_rp():
wrd = bpy.data.worlds['Arm']
@ -108,6 +108,11 @@ def get_renderdoc_path():
p = pdefault
return p
def get_player_gapi():
user_preferences = bpy.context.user_preferences
addon_prefs = user_preferences.addons['armory'].preferences
return 'opengl' if not hasattr(addon_prefs, 'player_gapi_' + get_os()) else getattr(addon_prefs, 'player_gapi_' + get_os())
def get_ease_viewport_camera():
return True
@ -150,17 +155,17 @@ def get_haxe_path():
def get_khamake_path():
return get_kha_path() + '/make'
def krom_paths():
def krom_paths(bin_ext=''):
sdk_path = get_sdk_path()
if arm.utils.get_os() == 'win':
krom_location = sdk_path + '/Krom/win32'
krom_path = krom_location + '/Krom.exe'
krom_path = krom_location + '/Krom' + bin_ext + '.exe'
elif arm.utils.get_os() == 'mac':
krom_location = sdk_path + '/Krom/macos/Krom.app/Contents/MacOS'
krom_path = krom_location + '/Krom'
krom_path = krom_location + '/Krom' + bin_ext
else:
krom_location = sdk_path + '/Krom/linux'
krom_path = krom_location + '/Krom'
krom_path = krom_location + '/Krom' + bin_ext
return krom_location, krom_path
def fetch_bundled_script_names():

View file

@ -139,6 +139,8 @@ project.addSources('Sources');
f.write(add_armory_library(sdk_path + '/lib/', 'iron_format'))
shaderload = state.target == 'krom' or state.target == 'html5'
if arm.utils.get_player_gapi() != 'opengl': # TODO: shader from source for d3d11
shaderload = False
if wrd.arm_cache_compiler and shaderload and not is_publish:
# Load shaders manually
assets.add_khafile_def('arm_shaderload')