// This source file is part of HGamer3D, a project to enable 3D game development
// in Haskell. For the latest info, see http://www.hgamer3d.org .
//
// (c) 2011-2014 Peter Althainz
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// ClassFrustum.h
//
#include "wchar.h"
#ifndef _DEFINED_HG3D_ClassFrustum
#define _DEFINED_HG3D_ClassFrustum
#include "ClassPtr.h"
#include "StructRadians.h"
#include "StructVec2.h"
#include "StructVec3.h"
#include "EnumFrustumPlane.h"
#include "StructSharedPtr.h"
#include "ClassCamera.h"
#include "EnumProjectionType.h"
#include "StructQuaternion.h"
#include "EnumOrientationMode.h"
// Named constructor.
void ogre_frst_construct(char * name_c, struct hg3dclass_struct * result_c);
//
void ogre_frst_destruct(struct hg3dclass_struct * thisclass_c);
//
void ogre_frst_setFOVy(struct hg3dclass_struct * thisclass_c, struct radian_struct * fovy_c);
//
void ogre_frst_getFOVy(struct hg3dclass_struct * thisclass_c, struct radian_struct * result_c);
//
void ogre_frst_setNearClipDistance(struct hg3dclass_struct * thisclass_c, float nearDist_c);
//
void ogre_frst_getNearClipDistance(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_setFarClipDistance(struct hg3dclass_struct * thisclass_c, float farDist_c);
//
void ogre_frst_getFarClipDistance(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_setAspectRatio(struct hg3dclass_struct * thisclass_c, float ratio_c);
//
void ogre_frst_getAspectRatio(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_setFrustumOffset(struct hg3dclass_struct * thisclass_c, struct vector2_struct * offset_c);
//
void ogre_frst_setFrustumOffset2(struct hg3dclass_struct * thisclass_c, float horizontal_c, float vertical_c);
//
void ogre_frst_getFrustumOffset(struct hg3dclass_struct * thisclass_c, struct vector2_struct * result_c);
//
void ogre_frst_setFocalLength(struct hg3dclass_struct * thisclass_c, float focalLength_c);
//
void ogre_frst_getFocalLength(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_setFrustumExtents(struct hg3dclass_struct * thisclass_c, float left_c, float right_c, float top_c, float bottom_c);
//
void ogre_frst_resetFrustumExtents(struct hg3dclass_struct * thisclass_c);
//
void ogre_frst_getFrustumExtents(struct hg3dclass_struct * thisclass_c, float * outleft_c, float * outright_c, float * outtop_c, float * outbottom_c);
// Returns whether a custom view matrix is in use.
void ogre_frst_isCustomViewMatrixEnabled(struct hg3dclass_struct * thisclass_c, long * result_c);
// Returns whether a custom projection matrix is in use.
void ogre_frst_isCustomProjectionMatrixEnabled(struct hg3dclass_struct * thisclass_c, long * result_c);
//
void ogre_frst_isVisible3(struct hg3dclass_struct * thisclass_c, struct vector3_struct * vert_c, enum EnumFrustumPlane * culledBy_c, long * result_c);
// Overridden from MovableObject::getTypeFlags
void ogre_frst_getTypeFlags(struct hg3dclass_struct * thisclass_c, unsigned long * result_c);
//
void ogre_frst_getBoundingRadius(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_getMovableType(struct hg3dclass_struct * thisclass_c, char * result_c);
//
void ogre_frst_getMaterial(struct hg3dclass_struct * thisclass_c, struct sharedptr_struct * result_c);
//
void ogre_frst_getSquaredViewDepth(struct hg3dclass_struct * thisclass_c, struct hg3dclass_struct * cam_c, float * result_c);
//
void ogre_frst_getWorldSpaceCorners(struct hg3dclass_struct * thisclass_c, struct vector3_struct * result_c);
//
void ogre_frst_setProjectionType(struct hg3dclass_struct * thisclass_c, enum EnumProjectionType pt_c);
//
void ogre_frst_getProjectionType(struct hg3dclass_struct * thisclass_c, enum EnumProjectionType * result_c);
//
void ogre_frst_setOrthoWindow(struct hg3dclass_struct * thisclass_c, float w_c, float h_c);
//
void ogre_frst_setOrthoWindowHeight(struct hg3dclass_struct * thisclass_c, float h_c);
//
void ogre_frst_setOrthoWindowWidth(struct hg3dclass_struct * thisclass_c, float w_c);
//
void ogre_frst_getOrthoWindowHeight(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_getOrthoWindowWidth(struct hg3dclass_struct * thisclass_c, float * result_c);
//
void ogre_frst_disableReflection(struct hg3dclass_struct * thisclass_c);
// Returns whether this frustum is being reflected.
void ogre_frst_isReflected(struct hg3dclass_struct * thisclass_c, long * result_c);
//
void ogre_frst_disableCustomNearClipPlane(struct hg3dclass_struct * thisclass_c);
//
void ogre_frst_isCustomNearClipPlaneEnabled(struct hg3dclass_struct * thisclass_c, long * result_c);
//
void ogre_frst_getPositionForViewUpdate(struct hg3dclass_struct * thisclass_c, struct vector3_struct * result_c);
//
void ogre_frst_getOrientationForViewUpdate(struct hg3dclass_struct * thisclass_c, struct quaternion_struct * result_c);
//
void ogre_frst_setOrientationMode(struct hg3dclass_struct * thisclass_c, enum EnumOrientationMode orientationMode_c);
//
void ogre_frst_getOrientationMode(struct hg3dclass_struct * thisclass_c, enum EnumOrientationMode * result_c);
#endif