Blame c++/contourgl/cudarender.h

6fa009
/*
6fa009
    ......... 2018 Ivan Mahonin
6fa009
6fa009
    This program is free software: you can redistribute it and/or modify
6fa009
    it under the terms of the GNU General Public License as published by
6fa009
    the Free Software Foundation, either version 3 of the License, or
6fa009
    (at your option) any later version.
6fa009
6fa009
    This program is distributed in the hope that it will be useful,
6fa009
    but WITHOUT ANY WARRANTY; without even the implied warranty of
6fa009
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6fa009
    GNU General Public License for more details.
6fa009
6fa009
    You should have received a copy of the GNU General Public License
6fa009
    along with this program.  If not, see <http: licenses="" www.gnu.org="">.</http:>
6fa009
*/
6fa009
6fa009
#ifndef _CUDARENDER_H_
6fa009
#define _CUDARENDER_H_
6fa009
6fa009
#include <vector></vector>
6fa009
6fa009
#include "cudacontext.h"
6fa009
#include "geometry.h"
6fa009
#include "contour.h"
6fa009
#include "swrender.h"
6fa009
6fa009
6fa009
class CudaRender {
6fa009
public:
6fa009
	struct Path {
6fa009
		ContextRect bounds;
6fa009
		int begin;
6fa009
		int end;
6fa009
		Color color;
6fa009
		bool invert;
6fa009
		bool evenodd;
6fa009
	};
6fa009
6fa009
private:
6fa009
	CudaContext &cu;
6fa009
	CUmodule contour_module;
6fa009
	CUfunction contour_path_kernel;
6fa009
	CUfunction contour_fill_kernel;
6fa009
6fa009
	Surface *surface;
6fa009
	CUdeviceptr points_buffer;
6fa009
	CUdeviceptr mark_buffer;
6fa009
	CUdeviceptr surface_image;
6fa009
6fa009
public:
6fa009
	CudaRender(CudaContext &cl);
6fa009
	~CudaRender();
6fa009
6fa009
	void send_surface(Surface *surface);
6fa009
	Surface* receive_surface();
6fa009
6fa009
	void send_points(const vec2f *points, int count);
6fa009
6fa009
	void draw(const Path &path);
6fa009
	void wait();
6fa009
};
6fa009
6fa009
6fa009
#endif