1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Improved SDL platform support, 'ar' lib reworking

This commit is contained in:
Brian Fiete 2022-11-07 09:57:27 -08:00
parent 258a6653f9
commit d20b53b187
16 changed files with 488 additions and 385 deletions

View file

@ -45,6 +45,10 @@ if (HAVE_BACKTRACE_HEADERS)
add_definitions(-DBFP_HAS_BACKTRACE)
endif ()
if (DEFINED BF_DISABLE_FFI)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBF_DISABLE_FFI")
endif()
if (${IOS})
include_directories(
.
@ -255,7 +259,7 @@ elseif (${ANDROID})
../BeefySysLib/platform/android/BFPlatform.cpp
../BeefySysLib/platform/android/AndroidCommon.cpp
)
else()
elseif ((${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") AND (NOT DEFINED BF_DISABLE_FFI))
file(GLOB SRC_FILES_OS
../BeefySysLib/platform/linux/BFPlatform.cpp
../BeefySysLib/platform/linux/LinuxCommon.cpp
@ -268,6 +272,11 @@ else()
../BeefySysLib/third_party/libffi/x86_64-unknown-linux-gnu/src/x86/unix64.o
../BeefySysLib/third_party/libffi/x86_64-unknown-linux-gnu/src/x86/ffiw64.o
)
else()
file(GLOB SRC_FILES_OS
../BeefySysLib/platform/linux/BFPlatform.cpp
../BeefySysLib/platform/linux/LinuxCommon.cpp
)
endif()
# Add library to build.

View file

@ -106,6 +106,10 @@ if(NOT MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-multichar")
endif(NOT MSVC)
if (DEFINED BF_ENABLE_SDL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBF_ENABLE_SDL")
endif()
################ Files ################
# -- Add files to project. -- #
#######################################
@ -118,7 +122,6 @@ file(GLOB SRC_FILES
Common.cpp
DataStream.cpp
FileStream.cpp
HeadlessApp.cpp
MemStream.cpp
ResLib.cpp
Startup.cpp
@ -308,11 +311,20 @@ if (${APPLE})
file(GLOB SRC_FILES_OS
platform/darwin/BFPlatform.cpp
platform/darwin/DarwinCommon.cpp
HeadlessApp.cpp
)
else()
file(GLOB SRC_FILES_OS
platform/linux/BFPlatform.cpp
platform/linux/LinuxCommon.cpp
HeadlessApp.cpp
)
endif()
if (DEFINED BF_ENABLE_SDL)
file(GLOB SRC_FILES_OS
platform/sdl/SdlBFApp.cpp
platform/sdl/GLRenderDevice.cpp
)
endif()

View file

@ -28,6 +28,10 @@
//#define offsetof(type, member) __builtin_offsetof (type, member)
#ifdef __arm__
#define BF_PLATFORM_OPENGL_ES2
#endif
extern "C"
{
//#define FFI_BUILDING

View file

@ -1,9 +1,14 @@
#pragma once
#include "../../HeadlessApp.h"
#include "../sdl/SdlBFApp.h"
#include "../HeadlessApp.h"
NS_BF_BEGIN;
#ifdef BF_ENABLE_SDL
typedef SdlBFApp PlatformBFApp;
#else
typedef HeadlessApp PlatformBFApp;
#endif
NS_BF_END;

View file

@ -559,6 +559,9 @@ BFP_EXPORT void BFP_CALLTYPE BfpSystem_Init(int version, BfpSystemInitFlags flag
BfpSystem_FatalError(StrFormat("Bfp build version '%d' does not match requested version '%d'", BFP_VERSION, version).c_str(), "BFP FATAL ERROR");
}
struct sigaction ignoreAction = { SIG_IGN };
sigaction(SIGPIPE, &ignoreAction, NULL);
//if (ptrace(PTRACE_TRACEME, 0, 1, 0) != -1)
{
//ptrace(PTRACE_DETACH, 0, 1, 0);

View file

@ -7,7 +7,9 @@
USING_NS_BF;
#ifndef NOT_IMPL
#define NOT_IMPL throw "Not implemented"
#endif
#pragma comment(lib, "SDL2.lib")
@ -138,7 +140,7 @@ static void CreateOrthographicOffCenter(float left, float right, float bottom, f
GLShaderParam::GLShaderParam()
{
mGLVariable = NULL;
mGLVariable = 0;
}
GLShaderParam::~GLShaderParam()
@ -229,9 +231,6 @@ GLDrawBatch::GLDrawBatch() : DrawBatch()
GLDrawBatch::~GLDrawBatch()
{
delete mVertices;
delete mIndices;
//mGLBuffer->Release();
}
extern int gBFDrawBatchCount;
@ -311,60 +310,6 @@ void GLDrawLayer::SetShaderConstantData(int usageIdx, int slotIdx, void* constDa
{
}
/*void GLDrawLayer::FreeBatch(DrawBatch* drawBatch)
{
//delete drawBatch;
GLDrawBatch* batch = (GLDrawBatch*) drawBatch;
batch->Clear();
//GLDrawBatchVector* pool = &((GLRenderDevice*) gBFApp->mRenderDevice)->mDrawBatchPool;
//pool->push_back(batch);
GLRenderDevice* glRenderDevice = (GLRenderDevice*)gBFApp->mRenderDevice;
drawBatch->mNext = glRenderDevice->mFreeBatchHead;
glRenderDevice->mFreeBatchHead = batch;
}*/
//void GLRenderDevice::PhysSetShader(Shader* shader)
//{
// GLRenderDevice* aRenderDevice = (GLRenderDevice*) gBFApp->mRenderDevice;
//
// //TODO: Cache more
//
// GLShader* glShader = (GLShader*)shader;
//
// GLfloat matrix[4][4];
// CreateOrthographicOffCenter(0.0f, (float)mPhysRenderWindow->mWidth, (float)mPhysRenderWindow->mHeight, 0.0f, -100.0f, 100.0f, matrix);
// GLint matrixLoc = bf_glGetUniformLocation(glShader->mGLProgram, "screenMatrix");
// //BF_ASSERT(matrixLoc >= 0);
// if (matrixLoc >= 0)
// bf_glUniformMatrix4fv(matrixLoc, 1, false, (float*)matrix);
//
// /*mPhysShaderPass = shaderPass;
// GLShaderPass* dXShaderPass = (GLShaderPass*) mPhysShaderPass;
// mGLDevice->IASetInputLayout(dXShaderPass->mGLLayout);
//
// if (mCurShader->mLastResizeCount != mCurRenderTarget->mResizeNum)
// {
// ShaderParam* shaderParam = mCurShader->GetShaderParam(L"WindowSize");
// if (shaderParam != NULL)
// {
// shaderParam->SetFloat2((float) mCurRenderTarget->mWidth, (float) mCurRenderTarget->mHeight);
// }
//
// mCurShader->mLastResizeCount = mCurRenderTarget->mResizeNum;
// }
//
// GLCHECK(dXShaderPass->mGLEffectPass->Apply(0));*/
//
// /*GLfloat matrix[4][4];
// CreateOrthographicOffCenter(0.0f, (float)mPhysRenderWindow->mWidth, (float)mPhysRenderWindow->mHeight, 0.0f, -100.0f, 100.0f, matrix);
// GLint uniformLocation = bf_glGetUniformLocation(((GLShader*)shaderPass->mTechnique->mShader)->mGLProgram, "screenMatrix");
// if (uniformLocation != -1)
// bf_glUniformMatrix4fv(uniformLocation, 1, false, (GLfloat*)matrix);*/
//}
void GLRenderDevice::PhysSetRenderWindow(RenderWindow* renderWindow)
{
mCurRenderTarget = renderWindow;

View file

@ -117,9 +117,6 @@ class GLRenderWindow : public RenderWindow
public:
SDL_Window* mSDLWindow;
GLRenderDevice* mRenderDevice;
//IGLGISwapChain* mGLSwapChain;
//IGL10Texture2D* mGLBackBuffer;
//IGL10RenderTargetView* mGLRenderTargetView;
bool mResizePending;
int mPendingWidth;
int mPendingHeight;
@ -138,18 +135,9 @@ public:
void CopyBitsTo(uint32* dest, int width, int height);
};
typedef std::vector<GLDrawBatch*> GLDrawBatchVector;
class GLRenderDevice : public RenderDevice
{
public:
//IGLGIFactory* mGLGIFactory;
//IGL10Device* mGLDevice;
//IGL10BlendState* mGLNormalBlendState;
//IGL10BlendState* mGLAdditiveBlendState;
//IGL10RasterizerState* mGLRasterizerStateClipped;
//IGL10RasterizerState* mGLRasterizerStateUnclipped;
GLuint mGLVAO;
GLuint mGLVertexBuffer;
GLuint mGLIndexBuffer;
@ -158,7 +146,6 @@ public:
bool mHasVSync;
GLDrawBatchVector mDrawBatchPool;
GLDrawBatch* mFreeBatchHead;
public:

View file

@ -24,13 +24,21 @@ SdlBFWindow::SdlBFWindow(BFWindow* parent, const StringImpl& title, int x, int y
mSDLWindow = SDL_CreateWindow(title.c_str(), x, y, width, height, sdlWindowFlags);
#ifndef BF_PLATFORM_OPENGL_ES2
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
#endif
if (!SDL_GL_CreateContext(mSDLWindow))
{
BF_FATAL(StrFormat("Unable to create OpenGL context: %s", SDL_GetError()).c_str());
BF_FATAL(StrFormat(
#ifdef BF_PLATFORM_OPENGL_ES2
"Unable to create OpenGLES context: %s"
#else
"Unable to create OpenGL context: %s"
#endif
, SDL_GetError()).c_str());
SDL_Quit();
exit(2);
}
@ -324,7 +332,7 @@ void SdlBFWindow::SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVis
uint32 SdlBFApp::GetClipboardFormat(const StringImpl& format)
{
return CF_TEXT;
return /*CF_TEXT*/1;
}
void* SdlBFApp::GetClipboardData(const StringImpl& format, int* size)

View file

@ -6,8 +6,8 @@ if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Build type not specified: Use Debug by default.")
endif(NOT CMAKE_BUILD_TYPE)
add_subdirectory(extern/hunspell)
add_subdirectory(BeefRT)
add_subdirectory(BeefySysLib)
add_subdirectory(extern/hunspell)
add_subdirectory(IDEHelper)
add_subdirectory(BeefBoot)
add_subdirectory(BeefRT)

View file

@ -195,9 +195,16 @@ namespace IDE
gApp.GetProjectBuildDir(project, projectBuildDir);
File.WriteAll(scope $"{projectBuildDir}/ObjectArgs.txt", .((.)objectsArg.Ptr, objectsArg.Length)).IgnoreError();
String arCmds = scope String(""); //-O2 -Rpass=inline
String arCmds = null; //-O2 -Rpass=inline
//(doClangCPP ? "-lc++abi " : "") +
String arArgs = scope .();
bool useArCmds = false;
if (useArCmds)
{
arCmds = scope:: String("");
arCmds.AppendF("CREATE {}\n", targetPath);
void AddObject(StringView obj)
@ -239,6 +246,40 @@ namespace IDE
}
}
arCmds.AppendF("SAVE\n");
}
else
{
arArgs.AppendF($"-qc {targetPath}");
void AddObject(StringView obj)
{
if (obj.IsEmpty)
return;
arArgs.Append(" ");
arArgs.Append(obj);
}
bool inQuote = false;
int lastEnd = -1;
for (int i < objectsArg.Length)
{
var c = objectsArg[i];
if (c == '"')
{
if (inQuote)
AddObject(objectsArg.Substring(lastEnd + 1, i - lastEnd - 1));
inQuote = !inQuote;
lastEnd = i;
}
else if ((c == ' ') && (!inQuote))
{
AddObject(objectsArg.Substring(lastEnd + 1, i - lastEnd - 1));
lastEnd = i;
}
}
AddObject(objectsArg.Substring(lastEnd + 1));
}
UpdateCacheStr(project, "", workspaceOptions, options, null, null);
@ -275,12 +316,14 @@ namespace IDE
return false;
}
String cmdLine = scope .();
cmdLine.AppendF("-M");
var runCmd = gApp.QueueRun(arPath, cmdLine, workingDir, .UTF8);
if (arCmds != null)
arArgs.Append("-M");
var runCmd = gApp.QueueRun(arPath, arArgs, workingDir, .UTF8);
runCmd.mReference = new String(project.mProjectName);
runCmd.mOnlyIfNotFailed = true;
if (arCmds != null)
runCmd.mStdInData = new .(arCmds);
var tagetCompletedCmd = new IDEApp.TargetCompletedCmd(project);
tagetCompletedCmd.mOnlyIfNotFailed = true;

View file

@ -8547,14 +8547,14 @@ namespace IDE
if (executionInstance.mProcess.AttachStandardInput(fileStream) case .Err)
return;
while (!executionInstance.mStdInData.IsEmpty)
WriteLoop: while (!executionInstance.mStdInData.IsEmpty)
{
switch (fileStream.TryWrite(.((.)executionInstance.mStdInData.Ptr, executionInstance.mStdInData.Length)))
{
case .Ok(int len):
executionInstance.mStdInData.Remove(0, len);
case .Err:
break;
break WriteLoop;
}
}
}
@ -8712,6 +8712,8 @@ namespace IDE
if ((mVerbosity >= .Diagnostic) && (useArgsFile != .None))
OutputLine("Arg file contents: {0}", args);
if ((mVerbosity >= .Diagnostic) && (stdInData != null))
OutputLine("StdIn data: {0}", stdInData);
}
else
OutputLine("Executing: {0}", showArgs);

View file

@ -523,7 +523,7 @@ namespace Tests
iSer.Serialize(serCtx);
Test.Assert(serCtx.mStr == "x 10\ny 2\n");
Test.Assert(cTest0 == "Test\n0");
Test.Assert(cTest0 == "Test\n0" || cTest0 == "Test\r\n0");
Test.Assert(cTest1 == "AAAAAAAAAAAA");
Test.Assert((Object)cTest1 == (Object)"AAAAAAAAAAAA");
Test.Assert((cTest0Binary[0] == (.)'T') && ((cTest0Binary.Count == 6) || (cTest0Binary.Count == 7)));

View file

@ -7,10 +7,25 @@ ROOTPATH="$(dirname "$SCRIPTPATH")"
echo Building from $SCRIPTPATH
cd $SCRIPTPATH
if [[ $1 == "clean" ]]; then
for i in "$@"
do
if [[ $i == "clean" ]]; then
echo "Cleaning..."
rm -rf ../jbuild
rm -rf ../jbuild_d
fi
exit
fi
if [[ $i == "sdl" ]]; then
echo "Using SDL"
USE_SDL="-DBF_ENABLE_SDL=1"
fi
if [[ $i == "no_ffi" ]]; then
echo "Disabling FFI"
USE_FFI="-DBF_DISABLE_FFI=1"
fi
done
if command -v ninja >/dev/null 2>&1 ; then
CAN_USE_NINJA=1
@ -55,11 +70,15 @@ if [ ! -d jbuild_d ]; then
mkdir jbuild_d
mkdir jbuild
fi
cd jbuild_d
cmake $USE_NINJA -DCMAKE_BUILD_TYPE=Debug ../
echo cmake $USE_NINJA $USE_SDL -DCMAKE_BUILD_TYPE=Debug ../
cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=Debug ../
cmake --build .
cd ../jbuild
cmake $USE_NINJA -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
cmake --build .
cd ../IDE/dist

66
bin/build_sdl.sh Normal file
View file

@ -0,0 +1,66 @@
#!/bin/bash
echo Starting build.sh
PATH=/usr/local/bin:$PATH:$HOME/bin
SCRIPTPATH=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
ROOTPATH="$(dirname "$SCRIPTPATH")"
echo Building from $SCRIPTPATH
cd $SCRIPTPATH
if [[ $1 == "clean" ]]; then
rm -rf ../jbuild_sdl
rm -rf ../jbuild_sdl_d
exit
fi
if [[ $1 == "sdl" ]]; then
echo "Using SDL"
USE_SDL="-DBF_ENABLE_SDL=1"
fi
if command -v ninja >/dev/null 2>&1 ; then
CAN_USE_NINJA=1
if [ -d ../jbuild_sdl_d ] && [ ! -f ../jbuild_sdl_d/build.ninja ]; then
CAN_USE_NINJA=0
fi
if [ $CAN_USE_NINJA == 1 ]; then
echo "Ninja is enabled for this build."
USE_NINJA="-GNinja"
else
echo "Ninja couldn't be enabled for this build, consider doing a clean build to start using Ninja for faster build speeds."
fi
else
echo "Ninja isn't installed, consider installing it for faster build speeds."
fi
# exit when any command fails
set -e
### Dependencies ###
if [ ! -f ../BeefySysLib/third_party/libffi/Makefile ]; then
echo Building libffi...
cd ../BeefySysLib/third_party/libffi
./configure
make
cd $SCRIPTPATH
fi
### LIBS ###
cd ..
if [ ! -d jbuild_sdl_d ]; then
mkdir jbuild_sdl_d
mkdir jbuild_sdl
fi
cd jbuild_sdl_d
echo cmake $USE_NINJA $USE_SDL -DCMAKE_BUILD_TYPE=Debug ../
cmake $USE_NINJA -DBF_ENABLE_SDL=1 -DCMAKE_BUILD_TYPE=Debug ../
cmake --build .
cd ../jbuild_sdl
cmake $USE_NINJA -DBF_ENABLE_SDL=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
cmake --build .