开发者

Why isn't Visual Studio allowing me to compile this Bresenham code?

I want to make this code run, but I'm still too much of a n00b on C, and OpenGL and VS 2008 to identify on which of them is the fault:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include<math.h>


void init(void)
{

//set display-window background color to white
glClearColor(1.0,1.0,1.0,0.0);
//set projection paramaters
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,300.0,0.0,300.0);


}


void setPixel(GLint xCoordinate, GLint yCoordinate)
{
glBegin(GL_POINTS);
glVertex2i(xCoordinate,yCoordinate);
glEnd();
glFlush(); //executes all OpenGL functions as quickly as possible
}

//Bresenham line-drawing procedure for |m| < 1.0

void lineBres(GLint x0, GLint y0, GLint xEnd, GLint yEnd)
{
GLint dx = fabs(xEnd - x0);
GLint dy = fabs(yEnd - y0);
GLint p = 2 * dy - dx;
GLint twoDy = 2 * dy;
GLint twoDyMinusDx = 2 * (dy-dx);
GLint x,y;
// determine which endpoint to use as start position


if (x0 > xEnd){
    x = xEnd;
    y = yEnd;
    xEnd = x;
    }else{
    x = x0;
    y = y0;
    }
    setPixel(x,y);
        while(x<xEnd){
            x++;
            if(p<0)
            p += twoDy;
            else{
                y++;
                p += twoDyMinusDx;
            }
            setPixel(x,y);
        }
}


void drawMyLine(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glPointSize(4.0);
        GLint x0 = 100;
        GLint y0 = 150;
        GLint xEnd = 200;
        GLint yEnd = 200;
        lineBres(x0,y0,xEnd,yEnd);
}


void main(int argc, char*argv[])
{
//initialize GLUT
    glutInit(&argc,argv);
//initialize display mode
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
//set display-window width & height
    glutInitWindowSize(400,400);
//set display-window upper-left position
    glutInitWindowPosition(0,0);
//create display-window with a title
    glutCreateWindow("Digital Differential Analyzer Algorithm: Programmed by Salha");
//initialze OpenGL
    init();
//call graphics to be displayed on the window
    glutDisplayFunc(drawMyLine);
//display everything and wait
    glutMainLoop();
}

Error messages:

1>------ Build started: Project: test2, Configuration: Debug Win32 ------
1>Compiling...
1>testing.c
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(68) : error C2275: 'GLint' : illegal use of this type as an expression
1>        e:\program files\microsoft sdks\windows\v6.0a\include\gl\gl.h(48) : see declaration of 'GLint'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(68) : error C2146: syntax error : missing ';' before identifier 'x0'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(68) : error C2065: 'x0' : undeclared identifier
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(69) : error C2275: 'GLint' : illegal use of this type as an expression
1>        e:\program files\microsoft sdks\windows\v6.0a\include\gl\gl.h(48) : see declaration of 'GLint'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(69) : error C2146: syntax error : missing ';' before identifier 'y0'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(69) : warning C4047: '=' : 'double (__cdecl *)(double)' differs in levels of indirection from 'int'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(69) : error C2106: '=' : left operand must be l-value
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(69) : warning C4550: expression evaluates to a function which is missing an argument list
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(70) : error C2275: 'GLint' : illegal use of this type as an expression
1>        e:\program files\microsoft sdks\windows\v6.0a\include\gl\gl.h(48) : see declaration of 'GLint'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(70) : error C2146: syntax error : missing ';' before identifier 'xEnd'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(70) : error C2065: 'xEnd' : undeclared identifier
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(71) : error C2275: 'GLint' : illegal use of this type as an expression
1>        e:\program files\microsoft sdks\windows\v6.0a\include\gl\gl.h(48)开发者_StackOverflow社区 : see declaration of 'GLint'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(71) : error C2146: syntax error : missing ';' before identifier 'yEnd'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(71) : error C2065: 'yEnd' : undeclared identifier
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(72) : error C2065: 'x0' : undeclared identifier
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(72) : warning C4047: 'function' : 'GLint' differs in levels of indirection from 'double (__cdecl *)(double)'
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(72) : warning C4024: 'lineBres' : different types for formal and actual parameter 2
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(72) : error C2065: 'xEnd' : undeclared identifier
1>e:\documents and settings\administrator\my documents\visual studio 2008\projects\test2\test2\testing.c(72) : error C2065: 'yEnd' : undeclared identifier
1>Build log was saved at "file://e:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\test2\test2\Debug\BuildLog.htm"
1>test2 - 15 error(s), 4 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Start at the first message

... testing.c(68) : error ... illegal use ...

Go to line 68 in your source

void drawMyLine(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glPointSize(4.0);
        GLint x0 = 100; /* THIS ONE? LINE 68? */
        GLint y0 = 150;
        GLint xEnd = 200;
        GLint yEnd = 200;
        lineBres(x0,y0,xEnd,yEnd);
}

Identify what's wrong and correct it (apparently you invoked your compiler in C89 mode: move the declarations to the top of the function). Recompile and loop

void drawMyLine(void)
{
        GLint x0 = 100; /* THIS ONE? LINE 68? */
        GLint y0 = 150;
        GLint xEnd = 200;
        GLint yEnd = 200;
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glPointSize(4.0);
        lineBres(x0,y0,xEnd,yEnd);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜