1  * License: 3-Clause BSD, see COPYING file in arcan source repository.
2  * Reference: http://arcan-fe.com
3  */
4 
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <stdint.h>
8 #include <string.h>
9 #include <stdbool.h>
10 #include <assert.h>
11 
12 #include "../platform_types.h"
13 #include "../video_platform.h"
14 #include "../platform.h"
15 
16 #include "arcan_math.h"
17 #include "arcan_general.h"
18 #include "arcan_video.h"
19 #include "arcan_videoint.h"
20 
21 agp_shader_id agp_default_shader(enum SHADER_TYPES type)
22 {
23 	return 1;
24 }
25 
agp_ident()26 const char* agp_ident()
27 {
28 	return "STUB";
29 }
30 
agp_shader_language()31 const char* agp_shader_language()
32 {
33 	return "STUB";
34 }
35 
agp_shader_envv(enum agp_shader_envts slot,void * value,size_t size)36 int agp_shader_envv(enum agp_shader_envts slot, void* value, size_t size)
37 {
38 	return 1;
39 }
40 
arcan_shader_lookup(const char * tag)41 agp_shader_id arcan_shader_lookup(const char* tag)
42 {
43 	return 1;
44 }
45 
agp_shader_source(enum SHADER_TYPES type,const char ** vert,const char ** frag)46 void agp_shader_source(enum SHADER_TYPES type,
47 	const char** vert, const char** frag)
48 {
49 	*vert = "";
50 	*frag = "";
51 }
52 
agp_envopts()53 const char** agp_envopts()
54 {
55 	static const char* env[] = {NULL};
56 	return env;
57 }
58 
agp_readback_synchronous(struct agp_vstore * dst)59 void agp_readback_synchronous(struct agp_vstore* dst)
60 {
61 }
62 
agp_drop_vstore(struct agp_vstore * s)63 void agp_drop_vstore(struct agp_vstore* s)
64 {
65 }
66 
agp_stream_prepare(struct agp_vstore * s,struct stream_meta meta,enum stream_type type)67 struct stream_meta agp_stream_prepare(struct agp_vstore* s,
68 	struct stream_meta meta, enum stream_type type)
69 {
70 	struct stream_meta mout = {0};
71 	return mout;
72 }
73 
agp_stream_release(struct agp_vstore * s,struct stream_meta meta)74 void agp_stream_release(struct agp_vstore* s, struct stream_meta meta)
75 {
76 }
77 
agp_stream_commit(struct agp_vstore * s,struct stream_meta meta)78 void agp_stream_commit(struct agp_vstore* s, struct stream_meta meta)
79 {
80 }
81 
agp_resize_vstore(struct agp_vstore * s,size_t w,size_t h)82 void agp_resize_vstore(struct agp_vstore* s, size_t w, size_t h)
83 {
84 }
85 
agp_request_readback(struct agp_vstore * s)86 void agp_request_readback(struct agp_vstore* s)
87 {
88 }
89 
agp_poll_readback(struct agp_vstore * t)90 struct asynch_readback_meta agp_poll_readback(struct agp_vstore* t)
91 {
92 	struct asynch_readback_meta res = {0};
93 	return res;
94 }
95 
agp_empty_vstore(struct agp_vstore * vs,size_t w,size_t h)96 void agp_empty_vstore(struct agp_vstore* vs, size_t w, size_t h)
97 {
98 }
99 
agp_setup_rendertarget(struct agp_vstore * vstore,enum rendertarget_mode m)100 struct agp_rendertarget* agp_setup_rendertarget(
101 	struct agp_vstore* vstore, enum rendertarget_mode m)
102 {
103 	return NULL;
104 }
105 
agp_init()106 void agp_init()
107 {
108 }
109 
agp_drop_rendertarget(struct agp_rendertarget * tgt)110 void agp_drop_rendertarget(struct agp_rendertarget* tgt)
111 {
112 }
113 
agp_activate_rendertarget(struct agp_rendertarget * tgt)114 void agp_activate_rendertarget(struct agp_rendertarget* tgt)
115 {
116 }
117 
agp_rendertarget_viewport(struct agp_rendertarget * tgt,ssize_t x1,ssize_t y1,ssize_t x2,ssize_t y2)118 void agp_rendertarget_viewport(struct agp_rendertarget* tgt,
119 	ssize_t x1, ssize_t y1, ssize_t x2, ssize_t y2)
120 {
121 }
122 
agp_rendertarget_clear()123 void agp_rendertarget_clear()
124 {
125 }
126 
agp_pipeline_hint(enum pipeline_mode mode)127 void agp_pipeline_hint(enum pipeline_mode mode)
128 {
129 }
130 
agp_null_vstore(struct agp_vstore * store)131 void agp_null_vstore(struct agp_vstore* store)
132 {
133 }
134 
agp_resize_rendertarget(struct agp_rendertarget * tgt,size_t neww,size_t newh)135 void agp_resize_rendertarget(
136 	struct agp_rendertarget* tgt, size_t neww, size_t newh)
137 {
138 }
139 
agp_activate_vstore_multi(struct agp_vstore ** backing,size_t n)140 void agp_activate_vstore_multi(struct agp_vstore** backing, size_t n)
141 {
142 }
143 
agp_update_vstore(struct agp_vstore * s,bool copy)144 void agp_update_vstore(struct agp_vstore* s, bool copy)
145 {
146 	FLAG_DIRTY();
147 }
148 
agp_prepare_stencil()149 void agp_prepare_stencil()
150 {
151 }
152 
agp_activate_stencil()153 void agp_activate_stencil()
154 {
155 }
156 
agp_disable_stencil()157 void agp_disable_stencil()
158 {
159 }
160 
agp_blendstate(enum arcan_blendfunc mdoe)161 void agp_blendstate(enum arcan_blendfunc mdoe)
162 {
163 }
164 
agp_draw_vobj(float x1,float y1,float x2,float y2,const float * txcos,const float * m)165 void agp_draw_vobj(
166 	float x1, float y1, float x2, float y2, const float* txcos, const float* m)
167 {
168 }
169 
agp_submit_mesh(struct agp_mesh_store * base,enum agp_mesh_flags fl)170 void agp_submit_mesh(struct agp_mesh_store* base, enum agp_mesh_flags fl)
171 {
172 }
173 
agp_invalidate_mesh(struct agp_mesh_store * base)174 void agp_invalidate_mesh(struct agp_mesh_store* base)
175 {
176 }
177 
agp_activate_vstore(struct agp_vstore * s)178 void agp_activate_vstore(struct agp_vstore* s)
179 {
180 }
181 
agp_deactivate_vstore()182 void agp_deactivate_vstore()
183 {
184 }
185 
agp_save_output(size_t w,size_t h,av_pixel * dst,size_t dsz)186 void agp_save_output(size_t w, size_t h, av_pixel* dst, size_t dsz)
187 {
188 }
189 
agp_shader_activate(agp_shader_id shid)190 int agp_shader_activate(agp_shader_id shid)
191 {
192 	return shid == 1;
193 }
194 
agp_shader_lookuptag(agp_shader_id id)195 const char* agp_shader_lookuptag(agp_shader_id id)
196 {
197 	if (id != 1)
198 		return NULL;
199 
200 	return "tag";
201 }
202 
agp_shader_lookupprgs(agp_shader_id id,const char ** vert,const char ** frag)203 bool agp_shader_lookupprgs(agp_shader_id id,
204 	const char** vert, const char** frag)
205 {
206 	if (id != 1)
207 		return false;
208 
209 	*vert = "";
210 	*frag = "";
211 
212 	return true;
213 }
214 
agp_shader_valid(agp_shader_id id)215 bool agp_shader_valid(agp_shader_id id)
216 {
217 	return 1 == id;
218 }
219 
arcan_shader_build(const char * tag,const char * geom,const char * vert,const char * frag)220 agp_shader_id arcan_shader_build(const char* tag, const char* geom,
221 	const char* vert, const char* frag)
222 {
223 	return (vert && frag && tag && geom) ? 1 : 0;
224 }
225 
agp_shader_forceunif(const char * label,enum shdrutype type,void * val)226 void agp_shader_forceunif(const char* label, enum shdrutype type, void* val)
227 {
228 }
229 
agp_shader_lookup(const char * tag)230 agp_shader_id agp_shader_lookup(const char* tag)
231 {
232 	return BROKEN_SHADER;
233 }
234 
agp_shader_build(const char * tag,const char * geom,const char * vert,const char * frag)235 agp_shader_id agp_shader_build(const char* tag,
236 	const char* geom, const char* vert, const char* frag)
237 {
238 	return BROKEN_SHADER;
239 }
240 
agp_shader_destroy(agp_shader_id shid)241 bool agp_shader_destroy(agp_shader_id shid)
242 {
243 	return false;
244 }
245 
agp_shader_addgroup(agp_shader_id shid)246 agp_shader_id agp_shader_addgroup(agp_shader_id shid)
247 {
248 	return BROKEN_SHADER;
249 }
250 
agp_empty_vstoreext(struct agp_vstore * vs,size_t w,size_t h,enum vstore_hint hint)251 void agp_empty_vstoreext(struct agp_vstore* vs,
252 	size_t w, size_t h, enum vstore_hint hint)
253 {
254 }
255 
agp_rendertarget_proxy(struct agp_rendertarget * tgt,bool (* proxy_state)(struct agp_rendertarget *,uintptr_t tag),uintptr_t tag)256 void agp_rendertarget_proxy(struct agp_rendertarget* tgt,
257 	bool (*proxy_state)(struct agp_rendertarget*, uintptr_t tag), uintptr_t tag)
258 {
259 }
260 
agp_drop_mesh(struct agp_mesh_store * s)261 void agp_drop_mesh(struct agp_mesh_store* s)
262 {
263 }
264 
agp_slice_vstore(struct agp_vstore * backing,size_t n_slices,size_t base,enum txstate txstate)265 bool agp_slice_vstore(struct agp_vstore* backing,
266 	size_t n_slices, size_t base, enum txstate txstate)
267 {
268 	return false;
269 }
270 
agp_slice_synch(struct agp_vstore * backing,size_t n_slices,struct agp_vstore ** slices)271 bool agp_slice_synch(
272 	struct agp_vstore* backing, size_t n_slices, struct agp_vstore** slices)
273 {
274 	return false;
275 }
276 
agp_glinit_fenv(struct agp_fenv * dst,void * (* lookup)(void * tag,const char * sym,bool req),void * tag)277 void agp_glinit_fenv(struct agp_fenv* dst,
278 	void*(*lookup)(void* tag, const char* sym, bool req), void* tag)
279 {
280 
281 }
282 
agp_setenv(struct agp_fenv * dst)283 void agp_setenv(struct agp_fenv* dst)
284 {
285 }
286 
287 #define TBLSIZE (1 + TIMESTAMP_D - MODELVIEW_MATR)
288 static char* symtbl[TBLSIZE] = {
289 	"modelview",
290 	"projection",
291 	"texturem",
292 	"obj_opacity",
293 	"trans_move",
294 	"trans_scale",
295 	"trans_rotate",
296 	"obj_input_sz",
297 	"obj_output_sz",
298 	"obj_storage_sz",
299 	"fract_timestamp",
300 	"timestamp"
301 };
302 
agp_shader_symtype(enum agp_shader_envts env)303 const char* agp_shader_symtype(enum agp_shader_envts env)
304 {
305 	return symtbl[env];
306 }
307 
agp_shader_flush()308 void agp_shader_flush()
309 {
310 }
311 
agp_shader_rebuild_all()312 void agp_shader_rebuild_all()
313 {
314 }
315 
agp_rendertarget_clearcolor(struct agp_rendertarget * tgt,float r,float g,float b,float a)316 void agp_rendertarget_clearcolor(
317 	struct agp_rendertarget* tgt, float r, float g, float b, float a)
318 {
319 }
320 
agp_status_ok(const char ** msg)321 bool agp_status_ok(const char** msg)
322 {
323 	return true;
324 }
325 
agp_render_options(struct agp_render_options opts)326 void agp_render_options(struct agp_render_options opts)
327 {
328 }
329 
agp_accelerated()330 bool agp_accelerated()
331 {
332 	return false;
333 }
334 
335