if (ctx->sizeVertices - ctx->vertCount > VKVG_ARRAY_THRESHOLD)
return;
ctx->sizeVertices += VKVG_VBO_SIZE;
- ctx->vertexCache = (Vertex*) realloc (ctx->vertexCache, ctx->sizeVertices * sizeof(Vertex));
+ Vertex* tmp = (Vertex*) realloc (ctx->vertexCache, ctx->sizeVertices * sizeof(Vertex));
+ if (tmp == NULL)
+ ctx->status = VKVG_STATUS_NO_MEMORY;
+ else
+ ctx->vertexCache = tmp;
}
void _check_ibo_size (VkvgContext ctx) {
if (ctx->sizeIndices - ctx->indCount > VKVG_ARRAY_THRESHOLD)
return;
ctx->sizeIndices += VKVG_IBO_SIZE;
- ctx->indexCache = (VKVG_IBO_INDEX_TYPE*) realloc (ctx->indexCache, ctx->sizeIndices * sizeof(VKVG_IBO_INDEX_TYPE));
+ VKVG_IBO_INDEX_TYPE* tmp = (VKVG_IBO_INDEX_TYPE*) realloc (ctx->indexCache, ctx->sizeIndices * sizeof(VKVG_IBO_INDEX_TYPE));
+ if (tmp == NULL)
+ ctx->status = VKVG_STATUS_NO_MEMORY;
+ else
+ ctx->indexCache = tmp;
}
void _check_pathes_array (VkvgContext ctx){
if (ctx->sizePathes - ctx->pathPtr - ctx->curvePtr > VKVG_ARRAY_THRESHOLD)
return;
ctx->sizePathes += VKVG_PATHES_SIZE;
- ctx->pathes = (uint32_t*) realloc (ctx->pathes, ctx->sizePathes * sizeof(uint32_t));
+ uint32_t* tmp = (uint32_t*) realloc (ctx->pathes, ctx->sizePathes * sizeof(uint32_t));
+ if (tmp == NULL){
+ ctx->status = VKVG_STATUS_NO_MEMORY;
+ ctx->pathPtr = 0 + (ctx->pathPtr % 2);
+ }else
+ ctx->pathes = tmp;
+}
+void _check_point_array (VkvgContext ctx){
+ if (ctx->sizePoints - ctx->pointCount > VKVG_ARRAY_THRESHOLD)
+ return;
+ ctx->sizePoints += VKVG_PATHES_SIZE;
+ vec2* tmp = (vec2*) realloc (ctx->points, ctx->sizePoints * sizeof(vec2));
+ if (tmp == NULL){
+ ctx->status = VKVG_STATUS_NO_MEMORY;
+ ctx->pointCount = 0;
+ }else
+ ctx->points = tmp;
}
//when empty, ptr is even, else it's odd
//when empty, no current point is defined.
ctx->points[ctx->pointCount] = (vec2){x,y};
ctx->pointCount++;
+ _check_point_array(ctx);
+
//bounds are computed here to scissor the painting operation
//that speed up fill drastically.
vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x, &y);
.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
.stencilLoadOp = stencilLoadOp,
.stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE,
- .initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
+ .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL };
VkAttachmentDescription attachments[] = {attColor,attDS};
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,
- .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
+ .initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL };
VkAttachmentDescription attDS = {
.format = FB_STENCIL_FORMAT,
void randomize_color (VkvgContext ctx) {
vkvg_set_source_rgba(ctx,
- 1.0f,//(float)rand()/RAND_MAX,
(float)rand()/RAND_MAX,
(float)rand()/RAND_MAX,
- 0.5f//(float)rand()/RAND_MAX
+ (float)rand()/RAND_MAX,
+ 0.5f//0.8f*rand()/RAND_MAX + 0.2f
);
}
bool deferredResolve = false;
- device = vkvg_device_create_multisample(vkh_app_get_inst(e->app), r->dev->phy, r->dev->dev, r->qFam, 0, VK_SAMPLE_COUNT_1_BIT, deferredResolve);
+ device = vkvg_device_create_multisample(vkh_app_get_inst(e->app), r->dev->phy, r->dev->dev, r->qFam, 0, VK_SAMPLE_COUNT_4_BIT, deferredResolve);
vkvg_device_set_dpy(device, 96, 96);
#ifdef VKVG_TEST_DIRECT_DRAW
- VkFence* fences = (VkFence*)calloc(r->imgCount, sizeof (VkFence));
surfaces = (VkvgSurface*)malloc(r->imgCount * sizeof (VkvgSurface));
for (uint i=0; i < r->imgCount;i++)
surfaces[i] = vkvg_surface_create_for_VkhImage (device, r->ScBuffers[i]);
gettimeofday(&before , NULL);
#ifdef VKVG_TEST_DIRECT_DRAW
- VkFence fence = vkh_fence_create (e->dev);
-
- if (!vkh_presenter_acquireNextImage(r, fence)) {
- for (uint i=0; i < r->imgCount;i++){
- if (fences[i]!=NULL){
- vkDestroyFence (e->dev->dev, fences[i], NULL);
- fences[i] = NULL;
- }
+
+ if (!vkh_presenter_acquireNextImage(r, NULL, NULL)) {
+ for (uint i=0; i < r->imgCount;i++)
vkvg_surface_destroy (surfaces[i]);
- }
- vkDestroyFence (e->dev->dev, fence, NULL);
+
vkh_presenter_create_swapchain (r);
+
for (uint i=0; i < r->imgCount;i++)
surfaces[i] = vkvg_surface_create_for_VkhImage (device, r->ScBuffers[i]);
}else{
surf = surfaces[r->currentScBufferIndex];
- if (fences[r->currentScBufferIndex] != NULL){
- vkWaitForFences (e->dev->dev, 1, &fences[r->currentScBufferIndex], VK_TRUE, UINT64_MAX);
- vkDestroyFence (e->dev->dev, fences[r->currentScBufferIndex], NULL);
- }
- fences[r->currentScBufferIndex] = fence;
testfunc();
vkh_presenter_build_blit_cmd (r, vkvg_surface_get_vk_image(surf), width, height);
#endif
- //vkDeviceWaitIdle(e->dev->dev);
+ vkDeviceWaitIdle(e->dev->dev);
gettimeofday(&after , NULL);
vkDeviceWaitIdle(e->dev->dev);
#ifdef VKVG_TEST_DIRECT_DRAW
- for (int i=0; i<r->imgCount;i++){
+ for (uint i=0; i<r->imgCount;i++)
vkvg_surface_destroy (surfaces[i]);
- if (fences[i]!=NULL)
- vkDestroyFence (e->dev->dev, fences[i], NULL);
- }
- free (fences);
+
free (surfaces);
#else
vkvg_surface_destroy (surf);
for (uint i=0;i<enabledExtsCount;i++)
enabledExts[i] = gflwExts[i];
-#if defined (ENABLE_VALIDATION)
+#if defined (VKVG_USE_VALIDATION)
const uint32_t enabledLayersCount = 2;
const char* enabledLayers[] = {"VK_LAYER_KHRONOS_validation", "VK_LAYER_RENDERDOC_Capture"};
#else
}
}
-#if defined(DEBUG) && defined(ENABLE_VALIDATION)
+#if defined(DEBUG) && defined(VKVG_USE_VALIDATION)
char const * dex [] = {"VK_KHR_swapchain", "VK_EXT_debug_marker"};
enabledExtsCount = 2;
#else
VkvgContext ctx = vkvg_create(surf);
vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_NON_ZERO);
- vkvg_set_line_width(ctx, 50);
+ vkvg_set_line_width(ctx, 20);
+ vkvg_scale(ctx,2,2);
vkvg_set_line_join(ctx, VKVG_LINE_JOIN_BEVEL);
//vkvg_arc (ctx, 200, 500, 100, 0, M_PI);
#include "test.h"
void test(){
- vkvg_surface_clear(surf);
struct timeval currentTime;
gettimeofday(¤tTime, NULL);
VkvgContext ctx = vkvg_create(surf);
vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD);
+ vkvg_clear(ctx);
//vkvg_set_line_join(ctx,VKVG_LINE_JOIN_BEVEL);
- for (int i=0; i<iterations; i++) {
+ for (uint i=0; i<iterations; i++) {
randomize_color(ctx);
- float x = 0.5f*w*rand()/RAND_MAX;
- float y = 0.5f*w*rand()/RAND_MAX;
- float z = 0.5f*w*rand()/RAND_MAX;
- float v = 0.5f*w*rand()/RAND_MAX;
+ float x = truncf(0.8f*w*rand()/RAND_MAX);
+ float y = truncf(0.8f*w*rand()/RAND_MAX);
+ float z = truncf((0.2f*w*rand()/RAND_MAX)+1.f);
+ float v = truncf((0.2f*w*rand()/RAND_MAX)+1.f);
vkvg_rectangle(ctx, x, y, z, v);
vkvg_fill(ctx);
- if (i%30==0)
+ if (i%250==0)
vkvg_flush(ctx);
}
vkvg_destroy(ctx);
int main(int argc, char *argv[]) {
- perform_test (test, 1024, 768);
+ perform_test (test, 800, 600);
return 0;
}
-Subproject commit bced7146e49377256b4e4ab8856e02a7b3a50355
+Subproject commit dd13cd6f6dcf94420f0919a2ca2837739cb46ea1