#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){	
	counter = 0;
	ofSetCircleResolution(100);
	texScreen.allocate(300,300,GL_RGB);
	ofBackground(230,230,240);
	
}
 

//--------------------------------------------------------------
void testApp::update(){
	counter += 1;
}


//--------------------------------------------------------------
void testApp::draw(){

	// 1st, draw on screen:
	ofSetColor(0x66CC33);	
	ofRect(100,100,300,300);
	
	ofSetColor(0xffffff);
	glPushMatrix();
		glTranslatef(200,200,0);
		glRotatef(counter,0,0,1);
		ofCircle(0,0,80);
		ofCircle(100,0,10);	// a small one
	glPopMatrix();
	ofSetColor(0x333333);
	ofDrawBitmapString("(a) on screen", 150,200);

	ofSetColor(0xFFCC33);	
	ofCircle(mouseX, mouseY,20);
	

	// 2nd, grab a portion of the screen into a texture
	// this is quicker then grabbing into an ofImage
	// because the transfer is done in the graphics card
	// as opposed to bringing pixels back to memory
	// note: you need to allocate the texture to the right size
	texScreen.loadScreenData(100,100,300,300);
	
	

	// finally, draw that texture on screen, how ever you want
	// (note: you can even draw the texture before you call loadScreenData, 
	// in order to make some trails or feedback type effects)
	glPushMatrix();
		ofSetColor(0xffffff);
		glTranslatef(550,300,0);
		//glRotatef(counter, 0.1f, 0.03f, 0);
		float width = 200 + 100 * sin(counter/200.0f);
		float height = 200 + 100 * sin(counter/200.0f);;
		texScreen.draw(-width/2,-height/2,width,height);
	glPopMatrix();

	glPushMatrix();
		ofSetColor(0xffffff);
		glTranslatef(700,210,0);
		glRotatef(counter, 0.1f, 0.03f, 0);
		texScreen.draw(-50,-50,100,100);
	glPopMatrix();

	ofSetColor(0x333333);
	ofDrawBitmapString("(b) in a texture, very meta!", 500,200);
}

//--------------------------------------------------------------
void testApp::keyPressed  (int key){ 
	
}

//--------------------------------------------------------------
void testApp::keyReleased(int key){ 
	
}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y ){
	
}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){
	
}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){
	
}

//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::resized(int w, int h){

}