Make the option ShivaVG or ShaderVG a Cmake option: USE_SHADERVG

next
Erik Hofman 3 years ago
parent 6451e505d8
commit b157f9cb9f

@ -95,6 +95,7 @@ option(ENABLE_RTI "Set to ON to build SimGear with RTI support" OFF)
option(ENABLE_GDAL "Set to ON to build SimGear with GDAL support" OFF)
option(ENABLE_TESTS "Set to OFF to disable building SimGear's test applications" ON)
option(ENABLE_SOUND "Set to OFF to disable building SimGear's sound support" ON)
option(USE_SHADERVG "Set to ON to use SHaderVG instead of ShivaVG" OFF)
option(USE_AEONWAVE "Set to ON to use AeonWave instead of OpenAL" ON)
option(USE_OPENALSOFT "Set to ON to use OpenAL from OpenAL-soft" OFF)
@ -108,6 +109,14 @@ if (NOT ENABLE_SIMD AND ENABLE_SIMD_CODE)
set(ENABLE_SIMD_CODE OFF)
endif()
if (USE_SHADERVG)
set(OPENVG ShaderVG)
find_package(GLEW REQUIRED)
else()
set(OPENVG ShivaVG)
endif()
message(STATUS "OpenVG: ${OPENVG}")
include (DetectArch)
include (ExportDebugSymbols)

@ -12,6 +12,11 @@ set(SIMGEAR_SOUND @ENABLE_SOUND@)
set(USE_AEONWAVE @USE_AEONWAVE@)
set(SG_SOUND_USES_OPENALSOFT @SG_SOUND_USES_OPENALSOFT@)
set(USE_SHADERVG @USE_SHADERVG@)
if (USE_SHADERVG)
find_dependency(GLEW REQUIRED)
endif()
set(ENABLE_ASAN @ENABLE_ASAN@)
set(SIMGEAR_SHARED @SIMGEAR_SHARED@)

@ -154,7 +154,7 @@ target_link_libraries(SimGearCore PRIVATE
${WINSOCK_LIBRARY})
if(NOT SIMGEAR_HEADLESS)
target_include_directories(SimGearScene PRIVATE ${PROJECT_SOURCE_DIR}/simgear/canvas/ShivaVG/include)
target_include_directories(SimGearScene PRIVATE ${PROJECT_SOURCE_DIR}/simgear/canvas/${OPENVG}/include)
target_link_libraries(SimGearScene PUBLIC
SimGearCore
@ -162,7 +162,7 @@ if(NOT SIMGEAR_HEADLESS)
)
if(HAVE_INTTYPES_H)
# ShivaVG needs inttypes.h
# ShivaVG/ShaderVG needs inttypes.h
target_compile_definitions(SimGearScene PRIVATE HAVE_INTTYPES_H)
endif()
@ -173,6 +173,10 @@ if(NOT SIMGEAR_HEADLESS)
${FFMPEG_LIBRARIES}
FGTinyGLTF)
if (USE_SHADERVG)
target_link_libraries(SimGearScene PRIVATE GLEW::GLEW)
endif()
# ToDo: define an ALIAS target for the sound backend, to get
# rid of this logic here
if (ENABLE_SOUND)

@ -29,7 +29,7 @@ set(SOURCES
VGInitOperation.cxx
)
add_subdirectory(ShivaVG/src)
add_subdirectory(${OPENVG}/src)
add_subdirectory(elements)
add_subdirectory(events)
add_subdirectory(layout)

@ -20,4 +20,4 @@ set(SOURCES
shVgu.c
)
simgear_scene_component(ShivaVG canvas/ShivaVG "${SOURCES}" "${HEADERS}")
simgear_scene_component(ShaderVG canvas/ShaderVG "${SOURCES}" "${HEADERS}")

@ -1,31 +0,0 @@
lib_LTLIBRARIES = libOpenVG.la
libOpenVG_la_CFLAGS = -pedantic -I$(top_builddir)/include/vg
libOpenVG_la_SOURCES =\
shDefs.h\
shExtensions.h\
shArrayBase.h\
shArrays.h\
shVectors.h\
shPath.h\
shImage.h\
shPaint.h\
shGeometry.h\
shContext.h\
shaders.h\
shExtensions.c\
shArrays.c\
shVectors.c\
shPath.c\
shImage.c\
shPaint.c\
shGeometry.c\
shPipeline.c\
shParams.c\
shContext.c\
shaders.c\
shVgu.c
VG_includedir = $(includedir)/vg
VG_include_HEADERS =\
$(top_builddir)/include/vg/openvg.h\
$(top_builddir)/include/vg/vgu.h

@ -23,8 +23,6 @@
/* Standard headers */
#include "shConfig.h"
#ifdef VG_API_WINDOWS
# include <windows.h>
#endif
@ -156,17 +154,14 @@ SHfloat getMaxFloat();
/* OpenGL headers */
#if defined(VG_API_LINUX) || defined(VG_API_FREEBSD) || defined(VG_API_OPENBSD)
#include <GL/gl.h>
#include <GL/glx.h>
#elif defined(VG_API_MACOSX)
#include <OpenGL/gl.h>
#if defined(VG_API_MACOSX)
# include <OpenGL/gl.h>
#elif defined(VG_API_WINDOWS)
#include <GL/gl.h>
# define GL_GLEXT_PROTOTYPES
# include <GL/glcorearb.h>
#else
#define GL_GLEXT_LEGACY /* don't include glext.h */
#include <GL/gl.h>
#include <GL/glx.h>
# define GL_GLEXT_PROTOTYPES
# include <GL/glcorearb.h>
#endif
#include "shExtensions.h"

@ -38,7 +38,6 @@
#define _ARRAY_DEFINE
#include "shArrayBase.h"
#ifndef SH_NO_IMAGE
/*-----------------------------------------------------------
* Prepares the proper pixel pack/unpack info for the given
@ -446,8 +445,6 @@ void shLoadColor(SHColor *c, const void *data, SHImageFormatDesc *f)
if (f->rmask == 0x0) { c->r = 1.0f; c->g = 1.0f; c->b = 1.0f; }
}
#endif // SH_NO_IMAGE
/*----------------------------------------------
* Color and Image constructors and destructors
@ -469,11 +466,7 @@ void SHImage_ctor(SHImage *i)
i->data = NULL;
i->width = 0;
i->height = 0;
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
glGenTextures(1, &i->texture);
#endif
}
void SHImage_dtor(SHImage *i)
@ -481,15 +474,10 @@ void SHImage_dtor(SHImage *i)
if (i->data != NULL)
free(i->data);
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
if (glIsTexture(i->texture))
glDeleteTextures(1, &i->texture);
#endif
}
#ifndef SH_NO_IMAGE
/*--------------------------------------------------------
* Finds appropriate OpenGL texture size for the size of
* the given image
@ -531,7 +519,6 @@ void shUpdateImageTexture(SHImage *i, VGContext *c)
i->texwidth, i->texheight, 0,
i->fd.glformat, i->fd.gltype, i->data);
}
#endif // SH_NO_IMAGE
/*----------------------------------------------------------
* Creates a new image object and returns the handle to it
@ -541,10 +528,6 @@ VG_API_CALL VGImage vgCreateImage(VGImageFormat format,
VGint width, VGint height,
VGbitfield allowedQuality)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
return VG_INVALID_HANDLE;
#else
SHImage *i = NULL;
SHImageFormatDesc fd;
VG_GETCONTEXT(VG_INVALID_HANDLE);
@ -599,14 +582,10 @@ VG_API_CALL VGImage vgCreateImage(VGImageFormat format,
shImageArrayPushBack(&context->images, i);
VG_RETURN((VGImage)i);
#endif // SH_NO_IMAGE
}
VG_API_CALL void vgDestroyImage(VGImage image)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHint index;
VG_GETCONTEXT(VG_NO_RETVAL);
@ -619,7 +598,6 @@ VG_API_CALL void vgDestroyImage(VGImage image)
shImageArrayRemoveAt(&context->images, index);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*---------------------------------------------------
@ -630,9 +608,6 @@ VG_API_CALL void vgDestroyImage(VGImage image)
VG_API_CALL void vgClearImage(VGImage image,
VGint x, VGint y, VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *i;
SHColor clear;
SHuint8 *data;
@ -674,11 +649,8 @@ VG_API_CALL void vgClearImage(VGImage image,
shUpdateImageTexture(i, context);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
#ifndef SH_NO_IMAGE
/*------------------------------------------------------------
* Generic function for copying a rectangle area of pixels
* of size (width,height) among two data buffers. The size of
@ -789,8 +761,6 @@ void shCopyPixels(SHuint8 *dst, VGImageFormat dstFormat, SHint dstStride,
}
}
#endif // SH_NO_IMAGE
/*---------------------------------------------------------
* Copies a rectangle area of pixels of size (width,height)
* from given data buffer to image surface at destination
@ -802,9 +772,6 @@ VG_API_CALL void vgImageSubData(VGImage image,
VGImageFormat dataFormat,
VGint x, VGint y, VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *i;
VG_GETCONTEXT(VG_NO_RETVAL);
@ -836,7 +803,6 @@ VG_API_CALL void vgImageSubData(VGImage image,
shUpdateImageTexture(i, context);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*---------------------------------------------------------
@ -851,9 +817,6 @@ VG_API_CALL void vgGetImageSubData(VGImage image,
VGint x, VGint y,
VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *i;
VG_GETCONTEXT(VG_NO_RETVAL);
@ -884,7 +847,6 @@ VG_API_CALL void vgGetImageSubData(VGImage image,
0,0,x,x,width,height);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*----------------------------------------------------------
@ -898,9 +860,6 @@ VG_API_CALL void vgCopyImage(VGImage dst, VGint dx, VGint dy,
VGint width, VGint height,
VGboolean dither)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *s, *d;
SHuint8 *pixels;
@ -941,7 +900,6 @@ VG_API_CALL void vgCopyImage(VGImage dst, VGint dx, VGint dy,
shUpdateImageTexture(d, context);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*---------------------------------------------------------
@ -954,9 +912,6 @@ VG_API_CALL void vgSetPixels(VGint dx, VGint dy,
VGImage src, VGint sx, VGint sy,
VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *i;
SHuint8 *pixels;
SHImageFormatDesc winfd;
@ -1001,7 +956,6 @@ VG_API_CALL void vgSetPixels(VGint dx, VGint dy,
free(pixels);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*---------------------------------------------------------
@ -1015,9 +969,6 @@ VG_API_CALL void vgWritePixels(const void * data, VGint dataStride,
VGint dx, VGint dy,
VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHuint8 *pixels;
SHImageFormatDesc winfd;
@ -1067,7 +1018,6 @@ VG_API_CALL void vgWritePixels(const void * data, VGint dataStride,
free(pixels);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*-----------------------------------------------------------
@ -1080,9 +1030,6 @@ VG_API_CALL void vgGetPixels(VGImage dst, VGint dx, VGint dy,
VGint sx, VGint sy,
VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHImage *i;
SHuint8 *pixels;
SHImageFormatDesc winfd;
@ -1121,7 +1068,6 @@ VG_API_CALL void vgGetPixels(VGImage dst, VGint dx, VGint dy,
shUpdateImageTexture(i, context);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*-----------------------------------------------------------
@ -1135,9 +1081,6 @@ VG_API_CALL void vgReadPixels(void * data, VGint dataStride,
VGint sx, VGint sy,
VGint width, VGint height)
{
#ifdef SH_NO_IMAGE
printf("ShaderVG: images not supported!");
#else
SHuint8 *pixels;
SHImageFormatDesc winfd;
VG_GETCONTEXT(VG_NO_RETVAL);
@ -1179,7 +1122,6 @@ VG_API_CALL void vgReadPixels(void * data, VGint dataStride,
free(pixels);
VG_RETURN(VG_NO_RETVAL);
#endif // SH_NO_IMAGE
}
/*----------------------------------------------------------

@ -37,9 +37,6 @@
#define _ARRAY_DEFINE
#include "shArrayBase.h"
// We currently do not use gradients which need textures, so disable them to
// prevent freeing resources outside the correct OpenGL thread/context.
#define SH_NO_PAINT_TEXTURE
void SHPaint_ctor(SHPaint *p)
{
@ -56,16 +53,12 @@ void SHPaint_ctor(SHPaint *p)
for (i=0; i<5; ++i) p->radialGradient[i] = 0.0f;
p->pattern = VG_INVALID_HANDLE;
#ifndef SH_NO_PAINT_TEXTURE
glGenTextures(1, &p->texture);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, p->texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SH_GRADIENT_TEX_WIDTH, SH_GRADIENT_TEX_HEIGHT, 0,
GL_RGBA, GL_FLOAT, NULL);
GL_CEHCK_ERROR;
#else
p->texture = 0;
#endif
}
void SHPaint_dtor(SHPaint *p)
@ -73,10 +66,8 @@ void SHPaint_dtor(SHPaint *p)
SH_DEINITOBJ(SHStopArray, p->instops);
SH_DEINITOBJ(SHStopArray, p->stops);
#ifndef SH_NO_PAINT_TEXTURE
if (glIsTexture(p->texture))
glDeleteTextures(1, &p->texture);
#endif
}
VG_API_CALL VGPaint vgCreatePaint(void)
@ -155,7 +146,6 @@ VG_API_CALL void vgPaintPattern(VGPaint paint, VGImage pattern)
void shUpdateColorRampTexture(SHPaint *p)
{
#ifndef SH_NO_PAINT_TEXTURE
SHint s=0;
SHStop *stop1, *stop2;
SHfloat rgba[SH_GRADIENT_TEX_COORDSIZE];
@ -199,9 +189,6 @@ void shUpdateColorRampTexture(SHPaint *p)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, i, SH_GRADIENT_TEX_WIDTH, 1, GL_RGBA, GL_FLOAT, rgba);
GL_CEHCK_ERROR;
#else
printf("ShaderVG: gradients not supported!");
#endif
}
void shValidateInputStops(SHPaint *p)
@ -363,7 +350,6 @@ void shGenerateStops(SHPaint *p, SHfloat minOffset, SHfloat maxOffset,
void shSetGradientTexGLState(SHPaint *p)
{
#ifndef SH_NO_PAINT_TEXTURE
glBindTexture(GL_TEXTURE_2D, p->texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@ -376,9 +362,6 @@ void shSetGradientTexGLState(SHPaint *p)
case VG_COLOR_RAMP_SPREAD_REFLECT:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); break;
}
#else
printf("ShaderVG: gradients not supported!");
#endif
}
void shSetPatternTexGLState(SHPaint *p, VGContext *c)

@ -390,7 +390,7 @@ VG_API_CALL void vgDrawPath(VGPath path, VGbitfield paintModes)
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDisable(GL_STENCIL_TEST);
// glDisable(GL_BLEND);
#if 0
#if 0
}else{
/* Simulate thin stroke by alpha */
@ -418,7 +418,7 @@ VG_API_CALL void vgDrawImage(VGImage image)
SHImage *i;
SHfloat mgl[16];
SHPaint *fill;
SHVector2 min, max;
//SHVector2 min, max;
SHRectangle *rect;
VG_GETCONTEXT(VG_NO_RETVAL);

@ -23,6 +23,7 @@
#cmakedefine GCC_ATOMIC_BUILTINS_FOUND
#cmakedefine OPENVG
#cmakedefine SYSTEM_EXPAT
#cmakedefine ENABLE_SOUND
#cmakedefine USE_AEONWAVE

Loading…
Cancel
Save