Merge pull request #7689 from eska014/webgl2

Enable WebGL2 in web export, start fixing build
This commit is contained in:
Rémi Verschelde 2017-02-02 08:18:42 +01:00 committed by GitHub
commit 40e4c1f6ab
13 changed files with 40 additions and 62 deletions

View File

@ -33,6 +33,7 @@
#ifdef NO_THREADS
#define OBJTYPE_RLOCK
#define OBJTYPE_WLOCK
#else
@ -776,11 +777,15 @@ void ClassDB::add_property(StringName p_class,const PropertyInfo& p_pinfo, const
#ifndef NO_THREADS
lock->read_lock();
#endif
ClassInfo *type=classes.getptr(p_class);
#ifndef NO_THREADS
lock->read_unlock();
#endif
ERR_FAIL_COND(!type);

View File

@ -44,6 +44,14 @@ uint32_t atomic_conditional_increment( register uint32_t * pw ) {
return *pw;
}
uint32_t atomic_increment( register uint32_t * pw ) {
(*pw)++;
return *pw;
}
uint32_t atomic_decrement( register uint32_t * pw ) {
(*pw)--;

View File

@ -81,7 +81,7 @@ class Vector {
size_t p;
if (_mul_overflow(p_elements, sizeof(T), &o)) return false;
*out = nearest_power_of_2(o);
if (_add_overflow(o, 32, &p)) return false; //no longer allocated here
if (_add_overflow(o, static_cast<size_t>(32), &p)) return false; //no longer allocated here
return true;
#else
// Speed is more important than correctness here, do the operations unchecked

View File

@ -1,8 +1,7 @@
#include "rasterizer_canvas_gles3.h"
#include "os/os.h"
#ifdef IPHONE_ENABLED
// for some reason glClearDepth seems to have been removed in iOS ES3.h
#ifndef GLES_OVER_GL
#define glClearDepth glClearDepthf
#endif

View File

@ -3,8 +3,7 @@
#include "os/os.h"
#include "rasterizer_canvas_gles3.h"
#ifdef IPHONE_ENABLED
// for some reason glClearDepth seems to have been removed in iOS ES3.h
#ifndef GLES_OVER_GL
#define glClearDepth glClearDepthf
#endif

View File

@ -135,7 +135,7 @@ Image RasterizerStorageGLES3::_get_gl_image_and_format(const Image& p_image, Ima
} break;
case Image::FORMAT_RGB565: {
#ifdef IPHONE_ENABLED
#ifndef GLES_OVER_GL
r_gl_internal_format=GL_RGB565;
#else
//#warning TODO: Convert tod 555 if 565 is not supported (GLES3.3-)

View File

@ -36,8 +36,6 @@
class AudioDriverJavaScript : public AudioDriver {
public:
void set_singleton();
virtual const char* get_name() const;
virtual Error init();

View File

@ -14,9 +14,7 @@ def get_name():
def can_build():
import os
if (not os.environ.has_key("EMSCRIPTEN_ROOT")):
return False
return True
return os.environ.has_key("EMSCRIPTEN_ROOT")
def get_opts():
@ -79,9 +77,8 @@ def configure(env):
# These flags help keep the file size down
env.Append(CPPFLAGS=["-fno-exceptions", '-DNO_SAFE_CAST', '-fno-rtti'])
env.Append(CPPFLAGS=['-DJAVASCRIPT_ENABLED', '-DUNIX_ENABLED', '-DPTHREAD_NO_RENAME', '-DNO_FCNTL', '-DMPC_FIXED_POINT', '-DTYPED_METHOD_BIND', '-DNO_THREADS'])
env.Append(CPPFLAGS=['-DGLES2_ENABLED'])
env.Append(CPPFLAGS=['-DGLES3_ENABLED'])
env.Append(CPPFLAGS=['-DGLES_NO_CLIENT_ARRAYS'])
# env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DMPC_FIXED_POINT'])
if env['wasm'] == 'yes':
env.Append(LINKFLAGS=['-s', 'BINARYEN=1'])
@ -101,14 +98,10 @@ def configure(env):
env.Append(CPPFLAGS=['-DJAVASCRIPT_EVAL_ENABLED'])
env.Append(LINKFLAGS=['-O2'])
env.Append(LINKFLAGS=['-s', 'USE_WEBGL2=1'])
# env.Append(LINKFLAGS=['-g4'])
# print "CCCOM is:", env.subst('$CCCOM')
# print "P: ", env['p'], " Platofrm: ", env['platform']
import methods
env.Append(BUILDERS={'GLSL120': env.Builder(action=methods.build_legacygl_headers, suffix='glsl.h', src_suffix='.glsl')})
env.Append(BUILDERS={'GLSL': env.Builder(action=methods.build_glsl_headers, suffix='glsl.h', src_suffix='.glsl')})
env.Append(BUILDERS={'GLSL120GLES': env.Builder(action=methods.build_gles2_headers, suffix='glsl.h', src_suffix='.glsl')})
#env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } )

View File

@ -184,8 +184,8 @@ void EditorExportPlatformJavaScript::_fix_html(Vector<uint8_t>& p_html, const St
String current_line = lines[i];
current_line = current_line.replace("$GODOT_TMEM",itos((1<<(max_memory+5))*1024*1024));
current_line = current_line.replace("$GODOT_BASE",p_name);
current_line = current_line.replace("$GODOT_CANVAS_WIDTH",GlobalConfig::get_singleton()->get("display/width"));
current_line = current_line.replace("$GODOT_CANVAS_HEIGHT",GlobalConfig::get_singleton()->get("display/height"));
current_line = current_line.replace("$GODOT_CANVAS_WIDTH",GlobalConfig::get_singleton()->get("display/window/width"));
current_line = current_line.replace("$GODOT_CANVAS_HEIGHT",GlobalConfig::get_singleton()->get("display/window/height"));
current_line = current_line.replace("$GODOT_HEAD_TITLE",!html_title.empty()?html_title:(String) GlobalConfig::get_singleton()->get("application/name"));
current_line = current_line.replace("$GODOT_HEAD_INCLUDE",html_head_include);
current_line = current_line.replace("$GODOT_STYLE_FONT_FAMILY",html_font_family);

View File

@ -277,10 +277,10 @@ $GODOT_STYLE_INCLUDE
statusElement.appendChild(closeNote);
Presentation.setStatusVisible(true);
},
isWebGLAvailable: function isWebGLAvailable() {
isWebGL2Available: function isWebGL2Available() {
var context;
try {
context = canvasElement.getContext("webgl") || canvasElement.getContext("experimental-webgl");
context = canvasElement.getContext("webgl2") || canvasElement.getContext("experimental-webgl2");
} catch (e) {}
return !!context;
},
@ -319,12 +319,12 @@ $GODOT_STYLE_INCLUDE
outputElement.firstChild.remove();
}
var msg = document.createElement("div");
if (text.trim().startsWith("**ERROR**")
|| text.startsWith("**EXCEPTION**")) {
if (String.prototype.trim.call(text).startsWith("**ERROR**")
|| String.prototype.trim.call(text).startsWith("**EXCEPTION**")) {
msg.style.color = "#d44";
} else if (text.trim().startsWith("**WARNING**")) {
} else if (String.prototype.trim.call(text).startsWith("**WARNING**")) {
msg.style.color = "#ccc000";
} else if (text.trim().startsWith("**SCRIPT ERROR**")) {
} else if (String.prototype.trim.call(text).startsWith("**SCRIPT ERROR**")) {
msg.style.color = "#c6d";
}
msg.textContent = text;
@ -395,8 +395,8 @@ $GODOT_STYLE_INCLUDE
}
};
if (!Presentation.isWebGLAvailable()) {
Presentation.setStatus("WebGL appears to be unsupported in the current browser.\nPlease try updating or use a different browser.");
if (!Presentation.isWebGL2Available()) {
Presentation.setStatus("WebGL2 appears to be unsupported in the current browser.\nPlease try updating or use a different browser.");
Presentation.preventLoading = true;
} else {
Presentation.setStatus("Downloading...");

View File

@ -156,7 +156,7 @@ Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) {
void JavaScript::_bind_methods() {
ObjectTypeDB::bind_method(_MD("eval", "code", "use_global_execution_context"), &JavaScript::eval, false);
ClassDB::bind_method(_MD("eval", "code", "use_global_execution_context"), &JavaScript::eval, false);
}
JavaScript::JavaScript() {

View File

@ -28,7 +28,7 @@
/*************************************************************************/
#include "os_javascript.h"
#include "drivers/gles2/rasterizer_gles2.h"
#include "drivers/gles3/rasterizer_gles3.h"
#include "core/io/file_access_buffered_fa.h"
#include "drivers/unix/file_access_unix.h"
#include "drivers/unix/dir_access_unix.h"
@ -47,7 +47,7 @@ int OS_JavaScript::get_video_driver_count() const {
const char * OS_JavaScript::get_video_driver_name(int p_driver) const {
return "GLES2";
return "GLES3";
}
OS::VideoMode OS_JavaScript::get_default_video_mode() const {
@ -237,30 +237,20 @@ void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int
print_line("Init Audio");
AudioDriverManager::add_driver(&audio_driver_javascript);
audio_driver_javascript.set_singleton();
if (audio_driver_javascript.init() != OK) {
if (true) {
RasterizerGLES2 *rasterizer_gles22=memnew( RasterizerGLES2(false,false,false,false) );
rasterizer_gles22->set_use_framebuffers(false); //not supported by emscripten
if (gl_extensions)
rasterizer_gles22->set_extensions(gl_extensions);
rasterizer = rasterizer_gles22;
} else {
//rasterizer = memnew( RasterizerGLES1(true, false) );
ERR_PRINT("Initializing audio failed.");
}
RasterizerGLES3::register_config();
RasterizerGLES3::make_current();
print_line("Init VS");
visual_server = memnew( VisualServerRaster(rasterizer) );
visual_server->init();
visual_server = memnew( VisualServerRaster() );
visual_server->cursor_set_visible(false, 0);
/*AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) {
ERR_PRINT("Initializing audio failed.");
}*/
print_line("Init Physicsserver");
physics_server = memnew( PhysicsServerSW );
@ -767,14 +757,6 @@ void OS_JavaScript::main_loop_request_quit() {
main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
}
void OS_JavaScript::reload_gfx() {
if (gfx_init_func)
gfx_init_func(gfx_init_ud,use_gl2,video_mode.width,video_mode.height,video_mode.fullscreen);
if (rasterizer)
rasterizer->reload_vram();
}
Error OS_JavaScript::shell_open(String p_uri) {
/* clang-format off */
EM_ASM_({
@ -877,7 +859,6 @@ OS_JavaScript::OS_JavaScript(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, Get
main_loop=NULL;
last_id=1;
gl_extensions=NULL;
rasterizer=NULL;
window_maximized=false;
get_data_dir_func=p_get_data_dir_func;

View File

@ -33,8 +33,6 @@
#include "drivers/unix/os_unix.h"
#include "os/main_loop.h"
#include "servers/physics/physics_server_sw.h"
#include "servers/spatial_sound/spatial_sound_server_sw.h"
#include "servers/spatial_sound_2d/spatial_sound_2d_server_sw.h"
#include "servers/audio_server.h"
#include "servers/physics_2d/physics_2d_server_sw.h"
#include "servers/visual/rasterizer.h"
@ -70,7 +68,6 @@ private:
int64_t time_to_save_sync;
int64_t last_sync_time;
Rasterizer *rasterizer;
VisualServer *visual_server;
PhysicsServer *physics_server;
Physics2DServer *physics_2d_server;
@ -165,8 +162,6 @@ public:
void set_opengl_extensions(const char* p_gl_extensions);
void reload_gfx();
virtual Error shell_open(String p_uri);
virtual String get_data_dir() const;
String get_executable_path() const;