| 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| 25 * POSSIBILITY OF SUCH DAMAGE. |
25 * POSSIBILITY OF SUCH DAMAGE. |
| 26 */ |
26 */ |
| 27 |
27 |
| |
28 #include "ascension/context.h" |
| 28 #include "ascension/camera.h" |
29 #include "ascension/camera.h" |
| |
30 |
| |
31 void asc_camera_init(AscCamera *camera, AscCameraParams params) { |
| |
32 if (params.type == ASC_CAMERA_ORTHO) { |
| |
33 asc_recti rect = params.ortho.rect; |
| |
34 if (rect.size.width <= 0 || rect.size.height <= 0) { |
| |
35 rect.size.width = 1; |
| |
36 rect.size.height = 1; |
| |
37 } |
| |
38 asc_camera_ortho(camera, rect); |
| |
39 } else if (params.type == ASC_CAMERA_PERSPECTIVE) { |
| |
40 // TODO: implement |
| |
41 asc_wprintf("Camera type PERSPECTIVE is not yet implemented."); |
| |
42 } else { |
| |
43 // at least zero all the bytes (law of the least surprise) |
| |
44 memset(camera, 0, sizeof(AscCamera)); |
| |
45 } |
| |
46 camera->viewport_update_func = params.viewport_update_func; |
| |
47 camera->projection_update_func = params.projection_update_func; |
| |
48 } |
| 29 |
49 |
| 30 void asc_camera_ortho(AscCamera *camera, asc_recti rect) { |
50 void asc_camera_ortho(AscCamera *camera, asc_recti rect) { |
| 31 asc_mat4f_unit(camera->view); |
51 asc_mat4f_unit(camera->view); |
| 32 float left = (float) rect.pos.x; |
52 float left = (float) rect.pos.x; |
| 33 float right = left + (float) rect.size.width; |
53 float right = left + (float) rect.size.width; |