obs-studio/test/test-input/test-random.c

86 lines
1.7 KiB
C
Raw Normal View History

2013-09-30 19:37:13 -07:00
#include <stdlib.h>
#include "test-random.h"
struct random_tex *random_create(const char *settings, obs_source_t source)
2013-09-30 19:37:13 -07:00
{
struct random_tex *rt = bmalloc(sizeof(struct random_tex));
uint32_t *pixels = bmalloc(20*20*4);
size_t x, y;
memset(rt, 0, sizeof(struct random_tex));
for (y = 0; y < 20; y++) {
for (x = 0; x < 20; x++) {
uint32_t pixel = 0xFF000000;
pixel |= (rand()%256);
pixel |= (rand()%256) << 8;
pixel |= (rand()%256) << 16;
//pixel |= 0xFFFFFFFF;
2013-09-30 19:37:13 -07:00
pixels[y*20 + x] = pixel;
}
}
gs_entercontext(obs_graphics());
rt->texture = gs_create_texture(20, 20, GS_RGBA, 1,
(const void**)&pixels, 0);
2013-09-30 19:37:13 -07:00
bfree(pixels);
if (!rt->texture) {
random_destroy(rt);
return NULL;
}
rt->whatever = gs_create_effect_from_file("draw.effect", NULL);
if (!rt->whatever) {
random_destroy(rt);
return NULL;
}
gs_leavecontext();
2013-09-30 19:37:13 -07:00
return rt;
}
void random_destroy(struct random_tex *rt)
{
if (rt) {
gs_entercontext(obs_graphics());
2013-09-30 19:37:13 -07:00
effect_destroy(rt->whatever);
texture_destroy(rt->texture);
bfree(rt);
gs_leavecontext();
2013-09-30 19:37:13 -07:00
}
}
uint32_t random_get_output_flags(struct random_tex *rt)
{
return SOURCE_VIDEO;
}
void random_video_render(struct random_tex *rt, obs_source_t filter_target)
2013-09-30 19:37:13 -07:00
{
technique_t tech = effect_gettechnique(rt->whatever, "Default");
effect_settexture(rt->whatever, effect_getparambyidx(rt->whatever, 1),
rt->texture);
2013-09-30 19:37:13 -07:00
technique_begin(tech);
technique_beginpass(tech, 0);
gs_draw_sprite(rt->texture);
technique_endpass(tech);
technique_end(tech);
}
int random_getwidth(struct random_tex *rt)
{
return texture_getwidth(rt->texture);
}
int random_getheight(struct random_tex *rt)
{
return texture_getheight(rt->texture);
}