TAMPA, Fla. — After a roller-coaster preseason that included a disastrous start against the Denver Broncos, San Francisco 49ers quarterback Jimmy Garoppolo had some wondering if he was on his way to a similar debacle midway through the second quarter of Sunday’s regular-season opener against Tampa Bay.

Garoppolo had just telegraphed a pass to running back Tevin Coleman without identifying Buccaneers cornerback Vernon Hargreaves. Hargreaves stepped in front of Coleman and returned the interception 15 yards for a touchdown and a 7-3 Tampa Bay lead.

Here we go again? Not so much.

“He gets it,” tight end George Kittle said. “One play at a time, don’t let things snowball, that’s all that matters. Jimmy is a pro. It’s fun having him in the huddle and on the field because he’s our leader and we respond to him.”

Indeed, Garoppolo managed to put the misread — coach Kyle Shanahan’s advice to avoid it in the future was “Don’t throw it” — behind him and manage the game well enough for a 31-17 victory.

For a Niners team that went winless on the road last season and was dealing with heat and humidity that are almost never found in the Bay Area, Garoppolo’s performance Sunday wasn’t overwhelming. It was enough to get a win, thanks largely to a defensive performance that included two interceptions for touchdowns.

But considering it was Garoppolo’s first start since tearing the ACL in his left knee Sept. 23, 2018, and just the 11th of his career, things could have gone much worse. Garoppolo finished a modest 18-of-27 for 166 yards with a touchdown and an interception for a passer rating of 80.2 and a QBR of 56.3.

Those numbers were far from eye-popping, but Garoppolo didn’t get much help, either.

“I think he made a couple good throws, but Jimmy and everyone else, including myself, need to get a lot more consistent,” Shanahan said. “There were some things out there that we missed, which I think made it a much tighter game than it needed to be.”

To be sure, Garoppolo missed on his share of throws in addition to the misread on the interception. After the Niners got their running game going with 36 yards on four carries to open a late third-quarter drive, Garoppolo had a golden opportunity to hit on a play-action pass to receiver Marquise Goodwin.

The threat of the run opened things up perfectly for the speedy Goodwin, but Garoppolo’s throw was a bit behind him. While Goodwin still should have caught it, a better pass would have likely gone for a 39-yard touchdown and helped put the game away.

Those are the type of throws Garoppolo would like to have back but which should come more naturally as he knocks the rust off of his left knee.

“You never want to miss those, especially the easy ones,” Garoppolo said. “You just get used to making them all the time. And then things happen. So, things to correct for next week.”

It also didn’t help Garoppolo that the offense kept coming up with penalties at inopportune times. The Niners saw three would-be touchdowns wiped away via yellow flags, two for Kittle and one for running back Raheem Mostert.

Add one or two of those and Garoppolo’s line looks much better.

“You hate to see those, all the penalties,” Garoppolo said. “[You] just want to wipe them away. But I think we responded well.”

After the victory, Garoppolo said he felt good in his return, at one point taking off for a 20-yard run that would have been a first down had it not also been wiped out by penalty.

It also helped that the game plan didn’t seem to ask Garoppolo to do too much in his first game back.

Aside from perfectly thrown ball that went for a 39-yard touchdown to Richie James in the second quarter, most of Garoppolo’s completions came underneath.

According to ESPN Stats & Information data, Garoppolo’s touchdown pass traveled 26 yards in the air. His other 17 completions traveled a combined 23 yards in the air.

After the game, Garoppolo said it wasn’t so much by design as just doing what the Bucs would allow.

“We wanted to pick our spots,” Garoppolo said. “And I think we did that to a point, but we were taking what they gave us. I think that’s what a good offense does.”

Sunday’s performance probably wouldn’t be filed in the good category for Garoppolo or the Niners offense, but unlike in recent seasons, the defense was there to pick them up. It’s reasonable to expect things to get better for Garoppolo the further removed he is from injury and the more comfortable he gets.

“Jimmy is the reason we are going to win any games that we are gonna win,” Kittle said. “If he’s playing good, the whole offense is going to play good. Jimmy is the leader of this team, and when he’s playing well, we’re going to play really well.”