This is clipgl.c in view mode; [Download] [Up]
#include <stdio.h>
#include <math.h>
#include "mg.h"
#include "mggl.h"
#include "geom.h"
#include "mibload.h"
#include "clip.h"
#include <gl/gl.h>
#include <X11/Xirisw/GlxMDraw.h>
void wininit(Widget, XtPointer,
GlxDrawCallbackStruct *);
void winexpose(Widget, XtPointer,
GlxDrawCallbackStruct *);
extern Geom *theObject;
ColorA white = {1.0, 1.0, 1.0, 1.0};
ColorA red = {1.0, 0, 0, 1.0};
ColorA darkgray = {0.2, 0.2, 0.2};
ColorA darkblue = {0, 0, .2, 1.0};
Point lightpos1 = {1, .3, .7, 0.0};
Point lightpos2 = {-0.5, 1.0, 0.5, 0.0};
ColorA lightcol2 = {0.6, 0.6, 0.6, 1.0};
Point lightpos3 = {0.0, -2.0, 1.0, 0.0};
ColorA lightcol3 = {0.4, 0.4, 0.4, 1.0};
Camera *theCamera;
Appearance *theAppearance;
LmLighting *lightingModel;
LtLight *theLight;
mgcontext *mgctx;
void clipboard_init(Widget parent)
{
int n;
Arg args[20];
Widget MG_DrawArea;
static GLXconfig db_rgb_desc[] = {
{ GLX_NORMAL, GLX_RGB, TRUE},
{ GLX_NORMAL, GLX_DOUBLE, FALSE},
{ GLX_NORMAL, GLX_ZSIZE, GLX_NOCONFIG },
{ 0,0,0 }
};
n = 0;
XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNleftOffset, 110);n++;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNtopOffset, 6);n++;
XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNrightOffset, 7);n++;
XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg (args[n], XmNbottomOffset, 8);n++;
XtSetArg (args[n], XmNhighlightThickness, 0); n++;
XtSetArg (args[n], GlxNglxConfig, db_rgb_desc); n++;
MG_DrawArea = GlxCreateMDraw(parent, "mg", args, n);
XtManageChild(MG_DrawArea);
mmode(MVIEWING);
XtAddCallback(MG_DrawArea, GlxNginitCallback, wininit, 0);
XtAddCallback(MG_DrawArea, GlxNexposeCallback, winexpose, 0);
mgdevice_GL();
theObject = NULL;
theCamera = CamCreate( CAM_FOV, 40.0, CAM_END );
lightingModel = LmCreate( LM_AMBIENT, &darkgray,
LM_REPLACELIGHTS, 1,
LM_END);
theLight = LtCreate( LT_COLOR, &white,
LT_POSITION, &lightpos1,
LT_INTENSITY, 1.0, LT_END);
LtAppend(lightingModel, theLight);
theLight = LtCreate( LT_COLOR, &lightcol2,
LT_POSITION, &lightpos2,
LT_INTENSITY, 1.0, LT_END);
LtAppend(lightingModel, theLight);
theLight = LtCreate( LT_COLOR, &lightcol3,
LT_POSITION, &lightpos3,
LT_INTENSITY, 1.0, LT_END);
LtAppend(lightingModel, theLight);
theAppearance = ApCreate( AP_DO, APF_FACEDRAW | APF_SHADING | APF_EDGEDRAW,
AP_MtSet, MT_Kd, 1.0, MT_DIFFUSE, &white, MT_END,
AP_LGT, lightingModel,
AP_SHADING, APF_FLAT, AP_END);
mgctx = mgctxcreate(MG_GLXDISPLAY, XtDisplay(MG_DrawArea),
MG_GLWINID, XtWindow(MG_DrawArea),
MG_CAMERA, theCamera, MG_BACKGROUND, &darkblue,
MG_APPEAR, theAppearance, MG_END);
/* theObject = GeomLoad("dodec.quad");*/
}
void wininit(Widget w, XtPointer stuff, GlxDrawCallbackStruct *data)
{
GLXwinset(XtDisplay(w), data->window);
fprintf(stderr,"init!\n");
/* color(GREEN);
clear();*/
}
void redraw(Widget w)
{
GLXwinset(XtDisplay(w), XtWindow(w));
mgreshapeviewport();
mgworldbegin();
GeomDraw(theObject);
mgworldend();
gflush();
}
void winexpose(Widget w, XtPointer stuff, GlxDrawCallbackStruct *data)
{
static float p1[] = {0.0, 0.0, 0.0};
static float p2[] = {800.0, 800.0, 0.0};
GLXwinset(XtDisplay(w), data->window);
mgreshapeviewport();
mgworldbegin();
GeomDraw(theObject);
mgworldend();
gflush();
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.