Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions build/build-android.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env bash

export QT_INSTALL_DIR=~/Qt
export QT_VERSION=6.7.3
export QTCREATOR_VERSION=13.0.1
export QT_BIN=$QT_INSTALL_DIR/$QT_VERSION/clang_64/bin

#./build/install-qt.sh -d $QT_INSTALL_DIR --version $QTCREATOR_VERSION qtcreator

qbs --version
qbs setup-android --ndk-dir /d/Environment/Android/sdk/ndk/29.0.14206865 android
qbs setup-toolchains --detect
qbs config --list

qbs build --all-products config:release qbs.toolchainType:clang profile:android
6 changes: 3 additions & 3 deletions build/build-osx.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/usr/bin/env bash

export QT_INSTALL_DIR=~/Qt
export QT_VERSION=5.12.10
export QTCREATOR_VERSION=5.0.3
export QT_VERSION=6.7.3
export QTCREATOR_VERSION=13.0.1
export QT_BIN=$QT_INSTALL_DIR/$QT_VERSION/clang_64/bin
export PATH="$QT_INSTALL_DIR/Qt Creator.app/Contents/MacOS:$QT_BIN:$PATH"

./build/install-qt.sh -d $QT_INSTALL_DIR --version $QT_VERSION qtbase qtmultimedia qtscript qtsvg qtimageformats qttools qtxmlpatterns qtdeclarative
./build/install-qt.sh -d $QT_INSTALL_DIR --version $QT_VERSION qtbase qtsvg qtimageformats qttools qtxmlpatterns qtdeclarative
./build/install-qt.sh -d $QT_INSTALL_DIR --version $QTCREATOR_VERSION qtcreator

qbs --version
Expand Down
19 changes: 7 additions & 12 deletions build/build-win.sh
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
#!/usr/bin/env bash

export MSVC=2015
export MSVC=2022
export QT_INSTALL_DIR=/c/Qt
export QT_VERSION=5.12.10
export QTCREATOR_VERSION=5.0.3
export QT_VERSION=6.7.3
export QTCREATOR_VERSION=13.0.1
export QT_BIN=$QT_INSTALL_DIR/$QT_VERSION/clang_64/bin
export PATH="$QT_INSTALL_DIR/Qt Creator.app/Contents/MacOS:$QT_BIN:$PATH"
export PATH="$QT_BIN:$PATH"

./build/install-qt.sh -d $QT_INSTALL_DIR --version $QT_VERSION qtbase qtmultimedia qtscript qtsvg qtimageformats qttools qtxmlpatterns qtdeclarative
./build/install-qt.sh -d $QT_INSTALL_DIR --version $QT_VERSION qtbase qtsvg qtimageformats qttools qtxmlpatterns qtdeclarative
./build/install-qt.sh -d $QT_INSTALL_DIR --version $QTCREATOR_VERSION qtcreator

qbs --version
qbs setup-toolchains --detect
qbs config defaultProfile xcode
qbs setup-qt $QT_PATH/qmake.exe qt
qbs config --list

qbs install --all-products config:release

qbs resolve config:release profile:xcode-iphoneos-arm64
qbs install --all-products config:release profile:xcode-iphoneos-arm64
qbs resolve config:release profile:xcode-appletvos-arm64
qbs install --all-products config:release profile:xcode-appletvos-arm64
qbs install --all-products config:release profile:qt
4 changes: 2 additions & 2 deletions modules/renders/rendergl/includes/resources/materialgl.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,14 @@ class MaterialGL : public Material {
public:
void loadUserData(const VariantMap &data) override;

uint32_t getProgram(uint16_t type, int32_t &global, int32_t &local);
uint32_t getProgram(uint32_t type, int32_t &global, int32_t &local);

Textures &textures() { return m_textures; }

protected:
uint32_t buildShader(uint16_t type, const TString &src = TString());

uint32_t buildProgram(const std::vector<uint32_t> &shaders, uint16_t vertex);
uint32_t buildProgram(const std::vector<uint32_t> &shaders);

bool checkShader(uint32_t shader);
bool checkProgram(uint32_t program);
Expand Down
53 changes: 30 additions & 23 deletions modules/renders/rendergl/src/resources/materialgl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,6 @@

const uint32_t gMaxUBO = 65536;

namespace {
const char *gInstanceData("InstanceData");
const char *gGlobalData("Global");
};

void MaterialGL::loadUserData(const VariantMap &data) {
Material::loadUserData(data);

Expand Down Expand Up @@ -47,15 +42,15 @@ void MaterialGL::loadUserData(const VariantMap &data) {
switchState(ToBeUpdated);
}

uint32_t MaterialGL::getProgram(uint16_t type, int32_t &global, int32_t &local) {
uint32_t MaterialGL::getProgram(uint32_t type, int32_t &global, int32_t &local) {
switch(state()) {
case ToBeUpdated: {
for(auto it : m_programs) {
glDeleteProgram(it.second);
}
m_programs.clear();

for(uint16_t v = Static; v < VertexLast; v++) {
for(uint16_t v = VertexStatic; v < VertexLast; v++) {
auto itv = m_shaderSources.find(v);
if(itv != m_shaderSources.end()) {
for(uint16_t f = FragmentDefault; f < FragmentLast; f++) {
Expand All @@ -66,11 +61,24 @@ uint32_t MaterialGL::getProgram(uint16_t type, int32_t &global, int32_t &local)

std::vector<uint32_t> shaders = {vertex, fragment};

uint32_t program = buildProgram(shaders, v);
m_programs[v * f] = program;
uint32_t hash = v;
Mathf::hashCombine(hash, f);

uint32_t program = buildProgram(shaders);
m_programs[hash] = program;

#ifdef THUNDER_MOBILE
m_globals[v * f] = glGetUniformBlockIndex(program, gGlobalData);
m_locals[v * f] = glGetUniformBlockIndex(program, gInstanceData);
int32_t global = glGetUniformBlockIndex(program, "Global");
if(global > -1) {
m_globals[hash] = global;
glUniformBlockBinding(program, global, global);
}

int32_t instanceData = glGetUniformBlockIndex(program, "InstanceData");
if(instanceData > -1) {
m_locals[hash] = instanceData;
glUniformBlockBinding(program, instanceData, instanceData);
}
#endif
}
}
Expand Down Expand Up @@ -137,7 +145,7 @@ uint32_t MaterialGL::buildShader(uint16_t type, const TString &src) {
return shader;
}

uint32_t MaterialGL::buildProgram(const std::vector<uint32_t> &shaders, uint16_t vertex) {
uint32_t MaterialGL::buildProgram(const std::vector<uint32_t> &shaders) {
uint32_t result = glCreateProgram();
if(result) {
#ifndef THUNDER_MOBILE
Expand Down Expand Up @@ -345,9 +353,12 @@ bool MaterialInstanceGL::bind(CommandBufferGL *buffer, uint32_t layer, uint32_t

MaterialGL *material = static_cast<MaterialGL *>(m_material);

uint32_t hash = (m_surfaceType + 1);
Mathf::hashCombine(hash, type);

int32_t globalLocation = -1;
int32_t instanceLocation = -1;
uint32_t program = material->getProgram((m_surfaceType + 1) * type, globalLocation, instanceLocation);
uint32_t program = material->getProgram(hash, globalLocation, instanceLocation);
if(!program) {
return false;
}
Expand All @@ -359,10 +370,6 @@ bool MaterialInstanceGL::bind(CommandBufferGL *buffer, uint32_t layer, uint32_t
}

if(globalLocation > -1 && index == 0) {
if(globalBuffer == 0) {
glBindBufferBase(GL_UNIFORM_BUFFER, globalLocation, globalBuffer);
glUniformBlockBinding(program, globalLocation, globalLocation);
}
static uint32_t currentGlobal = 0;
if(globalBuffer != currentGlobal) {
glBindBufferBase(GL_UNIFORM_BUFFER, globalLocation, globalBuffer);
Expand All @@ -377,11 +384,13 @@ bool MaterialInstanceGL::bind(CommandBufferGL *buffer, uint32_t layer, uint32_t

static uint32_t instanceBuffer = 0;
if(instanceBuffer != m_instanceBuffer) {
if(instanceLocation > -1) {
#ifdef THUNDER_MOBILE
glBindBufferBase(GL_UNIFORM_BUFFER, instanceLocation, m_instanceBuffer);
glBindBufferBase(GL_UNIFORM_BUFFER, instanceLocation, m_instanceBuffer);
#else
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, instanceLocation, m_instanceBuffer);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, instanceLocation, m_instanceBuffer);
#endif
}
instanceBuffer = m_instanceBuffer;
}

Expand Down Expand Up @@ -444,18 +453,16 @@ void MaterialInstanceGL::copyLocalData(uint32_t index, uint32_t program, int32_t
if(m_instanceBuffer == 0) {
glGenBuffers(1, &m_instanceBuffer);

int blockSize = -1;
int blockSize = 0;
glGetActiveUniformBlockiv(program, instanceLocation, GL_UNIFORM_BLOCK_DATA_SIZE, &blockSize);

glBindBuffer(GL_UNIFORM_BUFFER, m_instanceBuffer);
glBufferData(GL_UNIFORM_BUFFER, blockSize, nullptr, GL_DYNAMIC_DRAW);

glBindBufferBase(GL_UNIFORM_BUFFER, instanceLocation, m_instanceBuffer);
glUniformBlockBinding(program, instanceLocation, instanceLocation);
}

uint32_t offset = index * gMaxUBO;
int gpuBufferSize = MIN(gpuBuffer.size() - offset, gMaxUBO);

glBindBuffer(GL_UNIFORM_BUFFER, m_instanceBuffer);
glBufferSubData(GL_UNIFORM_BUFFER, 0, gpuBufferSize, &gpuBuffer[offset]);
glBindBuffer(GL_UNIFORM_BUFFER, 0);
Expand Down
Loading