#define SRP_INCLUDE_VEC
#define SRP_INCLUDE_MAT
#include <stdio.h>
#include "window.h"
#include "timer.h"
#include "rad.h"
typedef struct Vertex
{
} Vertex;
typedef struct VSOutput
{
} VSOutput;
typedef struct Uniform
{
size_t frameCount;
} Uniform;
void messageCallback(
const char* message, void* userParameter
);
int main()
{
srpNewContext(&srpContext);
srpContextSetP(SRP_CONTEXT_MESSAGE_CALLBACK, (void*) messageCallback);
const double R = 0.8;
Vertex data[3] = {
{.position = {0., R, 0.}, .color = {1., 0., 0.}},
{
.position = {-cos(RAD(30)) * R, -sin(RAD(30)) * R, 0.},
.color = {0., 0., 1.}
},
{
.position = { cos(RAD(30)) * R, -sin(RAD(30)) * R, 0.},
.color = {0., 1., 0.}
}
};
Uniform uniform = {0};
.shader = vertexShader,
.nOutputVariables = 1,
{.nItems = 3, .type = TYPE_DOUBLE}
},
.nBytesPerOutputVariables = sizeof(VSOutput)
},
.shader = fragmentShader
}
};
Window* window = newWindow(512, 512, "Rasterizer", false);
while (window->running)
{
TIMER_START(frametime);
uniform.rotation = mat4dConstructRotate(0, 0, uniform.frameCount / 1000.);
windowPollEvents(window);
windowPresent(window, fb);
uniform.frameCount++;
TIMER_STOP(frametime);
printf(
"Frametime: %li us; FPS: %lf; Framecount: %zu\n",
TIMER_REPORT_US(frametime, long),
1. / TIMER_REPORT_S(frametime, double),
uniform.frameCount
);
}
freeWindow(window);
return 0;
}
void messageCallback(
const char* message, void* userParameter
)
{
fprintf(stderr, "%s: %s", sourceFunction, message);
}
{
Vertex* pVertex = (Vertex*) in->
pVertex;
Uniform* pUniform = (Uniform*) in->uniform;
VSOutput* pOutVars = (VSOutput*) out->pOutputVariables;
vec3d* inPosition = &pVertex->position;
inPosition->x, inPosition->y, inPosition->z, 1.0
};
*outPosition = mat4dMultiplyVec4d(&pUniform->rotation, *outPosition);
pOutVars->color.x = pVertex->color.x + sin(pUniform->frameCount * 2.5e-3) * 0.3;
pOutVars->color.y = pVertex->color.y + sin(pUniform->frameCount * 0.5e-3) * 0.1;
pOutVars->color.z = pVertex->color.z + sin(pUniform->frameCount * 5e-3) * 0.5;
}
{
outColor->x = interpolated->color.x;
outColor->y = interpolated->color.y;
outColor->z = interpolated->color.z;
outColor->w = 1.;
}
void srpFreeVertexBuffer(SRPVertexBuffer *this)
Definition buffer.c:148
void srpDrawVertexBuffer(const SRPVertexBuffer *this, const SRPFramebuffer *fb, const SRPShaderProgram *sp, SRPPrimitive primitive, size_t startIndex, size_t count)
Definition buffer.c:154
void srpVertexBufferCopyData(SRPVertexBuffer *this, size_t nBytesPerVertex, size_t nBytesData, const void *data)
Definition buffer.c:132
SRPVertexBuffer * srpNewVertexBuffer()
Definition buffer.c:121
SRPFramebuffer * srpNewFramebuffer(size_t width, size_t height)
Definition framebuffer.c:32
void framebufferClear(const SRPFramebuffer *this)
Definition framebuffer.c:84
void srpFreeFramebuffer(SRPFramebuffer *this)
Definition framebuffer.c:45
@ SRP_PRIM_TRIANGLES
Definition buffer.h:24
enum MessageType SRPMessageType
enum MessageSeverity SRPMessageSeverity
struct SRPUniform SRPUniform
Definition shaders.h:17
Definition framebuffer.h:17