You are not logged in.

Dear visitor, welcome to KDE-Forum.org. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, June 20th 2008, 4:23am

kdescreensaver template useing QGLWidget

I'm trying to use the kdevelopment kdescreensaver template with QGLWidget. The only thing that has changed is "class Ocean : public QGLWidget". It works and compiles correctly until I use any OpenGL functions then I get this:

Development/KOceanSaver/src/ocean.cpp:38: undefined reference to `glShadeModel'
Entering directory Development/KOceanSaver/debug
*** Exited with status: 2 ***

I know this should work because it works when I do it with a "Simple KDE Application" template. I added "-lGL -lGLU" to config options. It must be that the kdescreensaver template does not include something that the "Simple KDE Application" template does that allowes QGLWidget to work. Help I have a nice screensaver I would like to make for kde4. its done I just need to get it to screensaver.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
+++++++++++++++++++++++++++++++++++++++++++++ ocean.h

#ifndef OCEAN_H
#define OCEAN_H

#include "qgl.h"
#include <GL/gl.h>
#include <GL/glu.h>

class Ocean : public QGLWidget
{
	public:
		Ocean ( );
		~Ocean();
		void initializeGL ();
};

#endif

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
+++++++++++++++++++++++++++++++++++++++++++++ ocean.cpp
#include "ocean.h"
#include "qgl.h"
#include <GL/gl.h>
#include <GL/glu.h>

Ocean::Ocean ( )
{

}


Ocean::~Ocean()
{
}


void Ocean::initializeGL ()
{
		glShadeModel ( GL_SMOOTH );

		//glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );

		//glClearDepth ( 1.0f );

		//glDisable ( GL_DEPTH_TEST );

		//glEnable ( GL_BLEND );

		//glBlendFunc ( GL_SRC_ALPHA, GL_ONE );

		//glHint ( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );

		//glHint ( GL_POINT_SMOOTH_HINT, GL_NICEST );

		//glEnable ( GL_TEXTURE_2D );
}

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
++++++++++++++++++++++++++++++++++++++++++++++++++++ koceansaver.h

#ifndef KOceanSaver_H__
#define KOceanSaver_H__

#include <qgl.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "ocean.h"

#include "kscreensaver.h"
#include "koceansaverui.h"

class KOceanSaver : public KScreenSaver
{
		Q_OBJECT
	public:
		KOceanSaver ( WId drawable );
		virtual ~KOceanSaver();
	private:
		Ocean* ocean;
		void readSettings();
		void blank();
};

class KOceanSaverSetup : public KOceanSaverUI
{
		Q_OBJECT
	public:
		KOceanSaverSetup ( QWidget *parent = NULL, const char *name = NULL );

	private slots:
		void slotOkPressed();
		void slotCancelPressed();

	private:
		void readSettings();
		KOceanSaver *saver;
};

#endif

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
++++++++++++++++++++++++++++++++++++++++++++++++++++ koceansaver.cpp
#include <stdlib.h>
#include <qcheckbox.h>
#include <qcolor.h>
#include <kapplication.h>
#include <klocale.h>
#include <kpushbutton.h>
#include <kconfig.h>
#include <kglobal.h>

#include <qgl.h>
#include <GL/gl.h>
#include <GL/glu.h>

#include "koceansaver.h"
#include "koceansaverui.h"


//! libkscreensaver interface
extern "C"
{
	KDE_EXPORT const char *kss_applicationName = "koceansaver.kss";
	KDE_EXPORT const char *kss_description = I18N_NOOP ( "KOceanSaver" );
	KDE_EXPORT const char *kss_version = "2.2.0";

	KDE_EXPORT KOceanSaver *kss_create ( WId id )
	{
		KGlobal::locale()->insertCatalogue ( "koceansaver" );
		return new KOceanSaver ( id );
	}

	KDE_EXPORT QDialog *kss_setup()
	{
		KGlobal::locale()->insertCatalogue ( "koceansaver" );
		return new KOceanSaverSetup();
	}
}

//-----------------------------------------------------------------------------
//! dialog to setup screen saver parameters
KOceanSaverSetup::KOceanSaverSetup ( QWidget *parent, const char *name )
		: KOceanSaverUI ( parent, name, TRUE )
{
	/// @todo
	//Connect your signals and slots here to configure the screen saver.
	connect ( OkayPushButton, SIGNAL ( released() ),
	          SLOT ( slotOkPressed() ) );
	connect ( CancelPushButton, SIGNAL ( released() ),
	          SLOT ( slotCancelPressed() ) );
}


//! read settings from config file
void KOceanSaverSetup::readSettings()
{
	KConfig *config = KGlobal::config();
	config->setGroup ( "Settings" );
	/// @todo
	// Add your config options here...
	CheckBox1->setChecked ( config->readBoolEntry ( "somesetting", false ) );
}


//! Ok pressed - save settings and exit
void KOceanSaverSetup::slotOkPressed()
{
	KConfig *config = KGlobal::config();
	config->setGroup ( "Settings" );
	/// @todo
	// Add your config options here.
	config->writeEntry ( "somesetting", CheckBox1->isChecked() );
	config->sync();

	accept();
}

void KOceanSaverSetup::slotCancelPressed()
{
	reject();
}
//-----------------------------------------------------------------------------


KOceanSaver::KOceanSaver ( WId id ) : KScreenSaver ( id )
{
	//setBackgroundColor ( QColor ( black ) );
	//erase();

	//readSettings();



	//blank();
}

KOceanSaver::~KOceanSaver()
{}


//! read configuration settings from config file
void KOceanSaver::readSettings()
{
	KConfig *config = KGlobal::config();
	config->setGroup ( "Settings" );
	/// @todo
	// Add your config options here...
	bool somesetting = config->readBoolEntry ( "somesetting", false );
}


void KOceanSaver::blank()
{
	/// @todo
	//Add your code to render the screen.
	this->ocean = new Ocean();
	embed(ocean);
	ocean->show();
}

Similar threads