Allow graphics api selection for player
This commit is contained in:
parent
3645f68c7f
commit
068d207a50
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue