GPU_select: utility function to finalize selection
[blender-staging.git] / source / blender / gpu / GPU_select.h
index 1a274e0ad9d297bff6d5208e1097ed6b82df29b7..53f480bccd79f0957888f1c95bfc8fe4f0376103 100644 (file)
  *  \ingroup gpu
  */
 
-#ifndef __GPU_SELECT__
-#define __GPU_SELECT__
+#ifndef __GPU_SELECT_H__
+#define __GPU_SELECT_H__
 
-#include "DNA_vec_types.h"  /* rcft */
 #include "BLI_sys_types.h"
 
+struct rcti;
+
 /* flags for mode of operation */
 enum {
        GPU_SELECT_ALL                      = 1,
+       /* gpu_select_query */
        GPU_SELECT_NEAREST_FIRST_PASS       = 2,
        GPU_SELECT_NEAREST_SECOND_PASS      = 3,
+       /* gpu_select_pick */
+       GPU_SELECT_PICK_ALL           = 4,
+       GPU_SELECT_PICK_NEAREST       = 5,
 };
 
-/* initialize and provide buffer for results */
-void GPU_select_begin(unsigned int *buffer, unsigned int bufsize, rctf *input, char mode, int oldhits);
-
-/* loads a new selection id and ends previous query, if any. In second pass of selection it also returns
- * if id has been hit on the first pass already. Thus we can skip drawing un-hit objects IMPORTANT: We rely on the order of object rendering on passes to be
- * the same for this to work */
+void GPU_select_begin(unsigned int *buffer, unsigned int bufsize, const struct rcti *input, char mode, int oldhits);
 bool GPU_select_load_id(unsigned int id);
-
-/* cleanup and flush selection results to buffer. Return number of hits and hits in buffer.
- * if dopass is true, we will do a second pass with occlusion queries to get the closest hit */
+void GPU_select_finalize(void);
 unsigned int GPU_select_end(void);
-
-/* does the GPU support occlusion queries? */
-bool GPU_select_query_check_support(void);
-
-/* is occlusion query supported and user activated? */
 bool GPU_select_query_check_active(void);
 
+/* cache selection region */
+bool GPU_select_is_cached(void);
+void GPU_select_cache_begin(void);
+void GPU_select_cache_load_id(void);
+void GPU_select_cache_end(void);
+
 #endif