Blame c++/contourgl/clrender.h

Ivan Mahonin 572d9c
/*
Ivan Mahonin 572d9c
    ......... 2015 Ivan Mahonin
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
    This program is free software: you can redistribute it and/or modify
Ivan Mahonin 572d9c
    it under the terms of the GNU General Public License as published by
Ivan Mahonin 572d9c
    the Free Software Foundation, either version 3 of the License, or
Ivan Mahonin 572d9c
    (at your option) any later version.
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
    This program is distributed in the hope that it will be useful,
Ivan Mahonin 572d9c
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Ivan Mahonin 572d9c
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Ivan Mahonin 572d9c
    GNU General Public License for more details.
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
    You should have received a copy of the GNU General Public License
Ivan Mahonin 572d9c
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Ivan Mahonin 572d9c
*/
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
#ifndef _RASTERIZER_H_
Ivan Mahonin 572d9c
#define _RASTERIZER_H_
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
#include <vector>
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
#include "clcontext.h"
Ivan Mahonin 572d9c
#include "geometry.h"
Ivan Mahonin 572d9c
#include "contour.h"
Ivan Mahonin 572d9c
#include "swrender.h"
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
class ClRender {
Ivan Mahonin f83e6b
private:
Ivan Mahonin 572d9c
	ClContext &cl;
Ivan Mahonin f83e6b
	cl_program contour_program;
Ivan Mahonin 013f0c
	cl_kernel contour_draw_kernel;
Ivan Mahonin 2517eb
	size_t contour_draw_workgroup_size;
Ivan Mahonin f83e6b
Ivan Mahonin f83e6b
	Surface *surface;
Ivan Mahonin 013f0c
	cl_mem paths_buffer;
Ivan Mahonin f83e6b
	cl_mem mark_buffer;
Ivan Mahonin 67876c
	cl_mem surface_image;
Ivan Mahonin 028154
	cl_event prev_event;
Ivan Mahonin 572d9c
Ivan Mahonin f83e6b
public:
Ivan Mahonin 572d9c
	ClRender(ClContext &cl);
Ivan Mahonin 572d9c
	~ClRender();
Ivan Mahonin 572d9c
Ivan Mahonin f83e6b
	void send_surface(Surface *surface);
Ivan Mahonin f83e6b
	Surface* receive_surface();
Ivan Mahonin 013f0c
	void send_paths(const void *paths, int size);
Ivan Mahonin 2517eb
	void remove_paths();
Ivan Mahonin 013f0c
	void draw();
Ivan Mahonin c7fa36
	void wait();
Ivan Mahonin 572d9c
};
Ivan Mahonin 572d9c
Ivan Mahonin 572d9c
Ivan Mahonin b09c5d
class ClRender2 {
Ivan Mahonin b09c5d
public:
Ivan Mahonin b09c5d
	struct Path {
Ivan Mahonin b09c5d
		Color color;
Ivan Mahonin b09c5d
		int invert;
Ivan Mahonin b09c5d
		int evenodd;
Ivan Mahonin b09c5d
		int align0;
Ivan Mahonin b09c5d
		int align1;
Ivan Mahonin b09c5d
	};
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
	struct Point {
Ivan Mahonin b09c5d
		vec2f coord;
Ivan Mahonin b09c5d
		int path_index;
Ivan Mahonin b09c5d
		int align0;
Ivan Mahonin b09c5d
	};
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
private:
Ivan Mahonin b09c5d
	ClContext &cl;
Ivan Mahonin b09c5d
	cl_program contour_program;
Ivan Mahonin b09c5d
	cl_kernel contour_reset_kernel;
Ivan Mahonin b09c5d
	cl_kernel contour_paths_kernel;
Ivan Mahonin b09c5d
	cl_kernel contour_draw_kernel;
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
	Surface *surface;
Ivan Mahonin b09c5d
	int points_count;
Ivan Mahonin b09c5d
	cl_mem paths_buffer;
Ivan Mahonin b09c5d
	cl_mem points_buffer;
Ivan Mahonin b09c5d
	cl_mem samples_buffer;
Ivan Mahonin b09c5d
	cl_mem surface_image;
Ivan Mahonin b09c5d
	cl_event prev_event;
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
public:
Ivan Mahonin b09c5d
	ClRender2(ClContext &cl);
Ivan Mahonin b09c5d
	~ClRender2();
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
	void send_surface(Surface *surface);
Ivan Mahonin b09c5d
	Surface* receive_surface();
Ivan Mahonin b09c5d
	void remove_surface();
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
	void send_paths(const Path *paths, int paths_count, const Point *points, int points_count);
Ivan Mahonin b09c5d
	void remove_paths();
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
	void draw();
Ivan Mahonin b09c5d
	void wait();
Ivan Mahonin b09c5d
};
Ivan Mahonin b09c5d
Ivan Mahonin b09c5d
Ivan Mahonin 105dfe
class ClRender3 {
Ivan Mahonin 105dfe
public:
Ivan Mahonin 105dfe
	struct Path {
Ivan Mahonin f14ea7
		ContextRect bounds;
Ivan Mahonin 105dfe
		int begin;
Ivan Mahonin 105dfe
		int end;
Ivan Mahonin 105dfe
		Color color;
Ivan Mahonin 105dfe
		bool invert;
Ivan Mahonin 105dfe
		bool evenodd;
Ivan Mahonin 105dfe
	};
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
private:
Ivan Mahonin 105dfe
	ClContext &cl;
Ivan Mahonin 105dfe
	cl_program contour_program;
Ivan Mahonin 105dfe
	cl_kernel contour_path_kernel;
Ivan Mahonin 105dfe
	cl_kernel contour_fill_kernel;
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
	Surface *surface;
Ivan Mahonin 105dfe
	cl_mem points_buffer;
Ivan Mahonin 105dfe
	cl_mem mark_buffer;
Ivan Mahonin 105dfe
	cl_mem surface_image;
Ivan Mahonin 105dfe
	cl_event prev_event;
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
public:
Ivan Mahonin 105dfe
	ClRender3(ClContext &cl);
Ivan Mahonin 105dfe
	~ClRender3();
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
	void send_surface(Surface *surface);
Ivan Mahonin 105dfe
	Surface* receive_surface();
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
	void send_points(const vec2f *points, int count);
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
	void draw(const Path &path);
Ivan Mahonin 105dfe
	void wait();
Ivan Mahonin 105dfe
};
Ivan Mahonin 105dfe
Ivan Mahonin 105dfe
Ivan Mahonin 572d9c
#endif