mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-16 14:08:59 +07:00
add audio, render and vfs profiler events
This commit is contained in:
@@ -6,8 +6,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/core/debug.hpp>
|
||||
#include <enduro2d/core/audio.hpp>
|
||||
#include <enduro2d/core/debug.hpp>
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
|
||||
#define E2D_AUDIO_MODE_NONE 1
|
||||
#define E2D_AUDIO_MODE_BASS 2
|
||||
|
||||
@@ -156,6 +156,8 @@ namespace e2d
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("audio.create_stream");
|
||||
|
||||
HSAMPLE sample = BASS_SampleLoad(
|
||||
TRUE,
|
||||
sound_data.data(),
|
||||
@@ -189,6 +191,8 @@ namespace e2d
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("audio.create_stream");
|
||||
|
||||
BASS_FILEPROCS file_procs = {
|
||||
sound_stream_close_proc,
|
||||
sound_stream_length_proc,
|
||||
@@ -226,6 +230,8 @@ namespace e2d
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("audio.create_source");
|
||||
|
||||
HCHANNEL channel = stream->state().stream()
|
||||
? stream->state().sound()
|
||||
: BASS_SampleGetChannel(stream->state().sound(), FALSE);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <enduro2d/core/debug.hpp>
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
#include <enduro2d/core/render.hpp>
|
||||
#include <enduro2d/core/window.hpp>
|
||||
|
||||
|
||||
@@ -497,33 +497,51 @@ namespace e2d
|
||||
{
|
||||
E2D_ASSERT(is_in_main_thread());
|
||||
|
||||
gl_shader_id vs = gl_compile_shader(
|
||||
state_->dbg(),
|
||||
vertex_shader_header_cstr(device_capabilities().profile),
|
||||
vertex_source,
|
||||
GL_VERTEX_SHADER);
|
||||
gl_shader_id vs(state_->dbg());
|
||||
|
||||
if ( vs.empty() ) {
|
||||
return nullptr;
|
||||
{
|
||||
E2D_PROFILER_SCOPE("render.compile_vertex_shader");
|
||||
|
||||
vs = gl_compile_shader(
|
||||
state_->dbg(),
|
||||
vertex_shader_header_cstr(device_capabilities().profile),
|
||||
vertex_source,
|
||||
GL_VERTEX_SHADER);
|
||||
|
||||
if ( vs.empty() ) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
gl_shader_id fs = gl_compile_shader(
|
||||
state_->dbg(),
|
||||
fragment_shader_header_cstr(device_capabilities().profile),
|
||||
fragment_source,
|
||||
GL_FRAGMENT_SHADER);
|
||||
gl_shader_id fs(state_->dbg());
|
||||
|
||||
if ( fs.empty() ) {
|
||||
return nullptr;
|
||||
{
|
||||
E2D_PROFILER_SCOPE("render.compile_fragment_shader");
|
||||
|
||||
fs = gl_compile_shader(
|
||||
state_->dbg(),
|
||||
fragment_shader_header_cstr(device_capabilities().profile),
|
||||
fragment_source,
|
||||
GL_FRAGMENT_SHADER);
|
||||
|
||||
if ( fs.empty() ) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
gl_program_id ps = gl_link_program(
|
||||
state_->dbg(),
|
||||
std::move(vs),
|
||||
std::move(fs));
|
||||
gl_program_id ps(state_->dbg());
|
||||
|
||||
if ( ps.empty() ) {
|
||||
return nullptr;
|
||||
{
|
||||
E2D_PROFILER_SCOPE("render.link_shader_program");
|
||||
|
||||
ps = gl_link_program(
|
||||
state_->dbg(),
|
||||
std::move(vs),
|
||||
std::move(fs));
|
||||
|
||||
if ( ps.empty() ) {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_shared<shader>(
|
||||
@@ -583,6 +601,11 @@ namespace e2d
|
||||
}
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE_EX("render.create_texture_from_image", {
|
||||
{"size", strings::rformat("%0", image.size())},
|
||||
{"format", strings::rformat("%0", image.format())}
|
||||
});
|
||||
|
||||
gl_texture_id id = gl_texture_id::create(state_->dbg(), GL_TEXTURE_2D);
|
||||
if ( id.empty() ) {
|
||||
state_->dbg().error("RENDER: Failed to create texture:\n"
|
||||
@@ -659,6 +682,11 @@ namespace e2d
|
||||
}
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE_EX("render.create_empty_texture", {
|
||||
{"size", strings::rformat("%0", size)},
|
||||
{"format", strings::rformat("%0", decl.type())}
|
||||
});
|
||||
|
||||
gl_texture_id id = gl_texture_id::create(state_->dbg(), GL_TEXTURE_2D);
|
||||
if ( id.empty() ) {
|
||||
state_->dbg().error("RENDER: Failed to create texture:\n"
|
||||
@@ -723,6 +751,8 @@ namespace e2d
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("render.create_index_buffer");
|
||||
|
||||
gl_buffer_id id = gl_buffer_id::create(state_->dbg(), GL_ELEMENT_ARRAY_BUFFER);
|
||||
if ( id.empty() ) {
|
||||
state_->dbg().error("RENDER: Failed to create index buffer:\n"
|
||||
@@ -757,6 +787,8 @@ namespace e2d
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("render.create_vertex_buffer");
|
||||
|
||||
gl_buffer_id id = gl_buffer_id::create(state_->dbg(), GL_ARRAY_BUFFER);
|
||||
if ( id.empty() ) {
|
||||
state_->dbg().error("RENDER: Failed to create vertex buffer:\n"
|
||||
@@ -813,6 +845,8 @@ namespace e2d
|
||||
}
|
||||
}
|
||||
|
||||
E2D_PROFILER_SCOPE("render.create_render_target");
|
||||
|
||||
gl_framebuffer_id id = gl_framebuffer_id::create(state_->dbg(), GL_FRAMEBUFFER);
|
||||
if ( id.empty() ) {
|
||||
state_->dbg().error("RENDER: Failed to create framebuffer:\n",
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
|
||||
#include <enduro2d/core/vfs.hpp>
|
||||
|
||||
#include <enduro2d/core/profiler.hpp>
|
||||
|
||||
#include <3rdparty/miniz/miniz.h>
|
||||
|
||||
namespace
|
||||
@@ -173,6 +175,9 @@ namespace e2d
|
||||
}
|
||||
|
||||
std::optional<buffer> vfs::load(const url& url) const {
|
||||
E2D_PROFILER_SCOPE_EX("vfs.sync_load", {
|
||||
{"url", url.schemepath()}
|
||||
});
|
||||
return load_async(url).then([](auto&& src){
|
||||
return std::optional(std::forward<decltype(src)>(src));
|
||||
}).get_or_default(std::nullopt);
|
||||
@@ -180,6 +185,9 @@ namespace e2d
|
||||
|
||||
stdex::promise<buffer> vfs::load_async(const url& url) const {
|
||||
return state_->worker.async([this, url](){
|
||||
E2D_PROFILER_SCOPE_EX("vfs.load_async", {
|
||||
{"url", url.schemepath()}
|
||||
});
|
||||
buffer content;
|
||||
const input_stream_uptr stream = read(url);
|
||||
if ( !stream || !streams::try_read_tail(content, stream) ) {
|
||||
@@ -190,6 +198,9 @@ namespace e2d
|
||||
}
|
||||
|
||||
std::optional<str> vfs::load_as_string(const url& url) const {
|
||||
E2D_PROFILER_SCOPE_EX("vfs.sync_load_as_string", {
|
||||
{"url", url.schemepath()}
|
||||
});
|
||||
return load_as_string_async(url).then([](auto&& src){
|
||||
return std::optional(std::forward<decltype(src)>(src));
|
||||
}).get_or_default(std::nullopt);
|
||||
@@ -197,6 +208,9 @@ namespace e2d
|
||||
|
||||
stdex::promise<str> vfs::load_as_string_async(const url& url) const {
|
||||
return state_->worker.async([this, url](){
|
||||
E2D_PROFILER_SCOPE_EX("vfs.load_as_string_async", {
|
||||
{"url", url.schemepath()}
|
||||
});
|
||||
str content;
|
||||
const input_stream_uptr stream = read(url);
|
||||
if ( !stream || !streams::try_read_tail(content, stream) ) {
|
||||
|
||||
Reference in New Issue
Block a user